<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: bbookman</title>
    <description>The latest articles on DEV Community by bbookman (@bbookman).</description>
    <link>https://dev.to/bbookman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F86318%2F32dfc45a-ec3f-41db-835c-7d4ab6441d4b.jpeg</url>
      <title>DEV Community: bbookman</title>
      <link>https://dev.to/bbookman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bbookman"/>
    <language>en</language>
    <item>
      <title>16 Ugly Bugs Snap Didn’t Bother To Fix For Snap Kit And Lessons They Teach</title>
      <dc:creator>bbookman</dc:creator>
      <pubDate>Wed, 26 Sep 2018 17:34:21 +0000</pubDate>
      <link>https://dev.to/bbookman/16-ugly-bugs-snap-didnt-bother-to-fix-for-snap-kit-and-lessons-they-teach-636</link>
      <guid>https://dev.to/bbookman/16-ugly-bugs-snap-didnt-bother-to-fix-for-snap-kit-and-lessons-they-teach-636</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/16-ugly-bugs-snap-didnt-bother-to-fix-for-snap-kit-and-lessons-they-teach-4dd6c1aa567" rel="noopener noreferrer"&gt;Original appears on Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A-xvbtrI9d5aRFYR4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A-xvbtrI9d5aRFYR4.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AI33vVGAVcpNuyCVF.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AI33vVGAVcpNuyCVF.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Snap has many business problems, including the poor rollout of Snap Kit SDK
&lt;/h2&gt;

&lt;p&gt;I’m an iOS Hobbyist developer using Swift 4 and iOS 12 and have been working with Snap Kit now for many months. With over 10 Medium posts, I have been chronicling my struggles and victories with the SDK. I have run into a number of problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Snapchat Snap Kit SDK Primer
&lt;/h2&gt;

&lt;p&gt;Snap Kit is Snap’s attempt to go beyond its primary app offering. To grow and stay relevant, Snap login must be as prevalent as Facebook, Twitter, or Google’s authentication on Apps. GIFY has inserted itself into many other apps and Snap has the opportunity to do the same thing with AR content, Stories, Lenses, and Filters.&lt;/p&gt;

&lt;p&gt;Snap Kit SDK is Snap’s attempt to become sticky.&lt;/p&gt;

&lt;p&gt;The bugs described are purposefully written in “Bug Style” with the hope that each will actually get filed against Snap Kit SDK for Snapchat App&lt;/p&gt;

&lt;p&gt;Some of the bugs documented below are nit-picky, however, Snap is in no position to allow even the slightest developer friction to occur. Snap’s future is partly riding on the success of Snap Kit, and the business has very little wiggle room to get things wrong. Winning over the developer community is paramount to Snap Kit SDK adoption.&lt;/p&gt;

&lt;p&gt;Also, some of these could be considered feature requests, documentation requests or things that are “not bugs”. As someone with 20 years of software industry experience, I say these are “FAILURES” that need to be addressed (aka Bugs).&lt;/p&gt;

&lt;h2&gt;
  
  
  Business Lessons
&lt;/h2&gt;

&lt;p&gt;For each of the bugs, I have added advice on improving the business approach to software release&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A6i1aTGVmYQm7Mcgs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A6i1aTGVmYQm7Mcgs.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Bugs
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1 — Single Point Of Support
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://docs.snapchat.com/docs/" rel="noopener noreferrer"&gt;https://docs.snapchat.com/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Note the text
&amp;gt; Feedback?
We regularly update our documentation to give you everything you need for creative, easy integrations. If something’s not working for you, please report it to &lt;a href="mailto:snapkit-support@snap.com"&gt;snapkit-support@snap.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Automated response text says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi there!” Learn more about Snap Kit by visiting support.snapchat.com/news/snapkit. If you have further questions please reach out to us at support.snapchat.com/i-need-help. Thanks!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are a few issues with the automated response:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tells the customer who is seeking customer support to look at the news blog. The news blog is not designed as a customer support tool.&lt;/li&gt;
&lt;li&gt;Tells the customer if they need further assistance to go to “I need help”. This part of the Snapchat website is not designed to deliver developer nor customer facing support for Snap Kit. A look at that URL will show that there is no way to report a specific Snap Kit SDK issue and the user will feel like anything they report there will end up in a black hole.&lt;/li&gt;
&lt;li&gt;The automated response does not say that anyone will actually read the email the customer sent nor help. It only talks about where to go and what to read. It is far from customer friendly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reword the automated response:&lt;/p&gt;

&lt;p&gt;Thank you for contacting Snap Kit Support. This automated response is to let you know we received your request and will be reaching out to you shortly&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When introducing a product that is outside current offerings, review all customer engagement vectors. Staff appropriately. Involve Quality Assurance and Technical Support from the start (involve all stakeholders)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A4cskYBastNPTg8De.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A4cskYBastNPTg8De.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2 — Add Snap Kit SDK Support Options To ‘I Need Help’
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to
&lt;a href="http://support.snapchat.com/i-need-help" rel="noopener noreferrer"&gt;http://support.snapchat.com/i-need-help&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Note the available options:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What can we help you with?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;My account login&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Report a safety concern&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My Snapchat isn’t working&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My Snapstreaks disappeared . . .&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;None of these provide a clear option for someone seeking Snap Kit SDK assistance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add an option for Snap Kit SDK Support&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Same as bug #1. A release of any product is more than just the product. It is&lt;br&gt;
much more than just an announcement. A product launch team must be holistic and&lt;br&gt;
represent every part of the company that has customer touchpoints or is&lt;br&gt;
otherwise a stakeholder&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A35rDznurqWcluDNq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A35rDznurqWcluDNq.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 — Snapchat Support On Twitter Not Providing SDK Support
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps to Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to
&lt;a href="https://twitter.com/snapchatsupport" rel="noopener noreferrer"&gt;https://twitter.com/snapchatsupport&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ask a Snap Kit question such as “Do we ask this account for help with Snap
Kit?”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A number of problematic results occur. However, the key is that the team&lt;br&gt;
delivering support through twitter is clearly not staffed to handle Snap Kit SDK&lt;br&gt;
questions.&lt;/p&gt;

&lt;p&gt;The initial response after step #2 above was a bot with a link to&lt;br&gt;
&lt;a href="https://kit.snapchat.com/" rel="noopener noreferrer"&gt;https://kit.snapchat.com/&lt;/a&gt;. Clearly not a helpful&lt;br&gt;
response to the question. Also, see the image directly above this bug writeup&lt;/p&gt;

&lt;p&gt;The next response also seemed canned and perhaps a bot&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;We’ll need to look further into this. Head over to spr.ly/help and select the&lt;br&gt;
options that match your issue . . .&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That URL leads to the ‘I Need Help’ page and yields bug #2 above and is somewhat&lt;br&gt;
related to bug #1 as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modify the bots/automated response on Snapchat Support Twitter account such that&lt;br&gt;
it handles Snap Kit queries appropriately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think like your target customer. Follow the workflow of your target and test,&lt;br&gt;
test, test. The website experience, the licensing experience, the onboarding,&lt;br&gt;
test everything that could be an interaction with a customer — especially when&lt;br&gt;
delivering a product whose likeness is brand new to your product line.&lt;/p&gt;

&lt;p&gt;Stakeholders should have sign off authority on every customer touch point prior&lt;br&gt;
to release&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AI_OIaePwnPZ2k41X.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AI_OIaePwnPZ2k41X.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4 — Code Sample Error in Creative Kit Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to
&lt;a href="https://docs.snapchat.com/docs/creative-kit/" rel="noopener noreferrer"&gt;https://docs.snapchat.com/docs/creative-kit/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Scroll down to this&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This line is not correct&lt;/p&gt;

&lt;p&gt;It should be &lt;strong&gt;SCSDKPhotoSnapContent&lt;/strong&gt; rather than SCSDKSnapPhotoContent (see&lt;br&gt;
also bug #5 below)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Please correct the documentation.&lt;/p&gt;

&lt;p&gt;There is a larger issue with the SDK itself. The naming is inconsistent — see&lt;br&gt;
bug #5&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All documentation should be tested by professional Quality Assurance Engineers.&lt;br&gt;
Documentation is a product. Documentation is just as much a part of the product&lt;br&gt;
as any other piece.&lt;/p&gt;

&lt;p&gt;Also, eat your own dogfood!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A9zjf-1Su1udkgWJa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A9zjf-1Su1udkgWJa.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5 — Naming Inconsistencies with Creative Kit
&lt;/h2&gt;

&lt;p&gt;In Creative Kit there is a method with the name ‘SCSDKSnapPhoto’&lt;/p&gt;

&lt;p&gt;Carefully notice the pattern of the name. The first word is &lt;strong&gt;Snap&lt;/strong&gt; and second&lt;br&gt;
the word &lt;strong&gt;Photo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creative Kit also has the method ‘SCSDKPhotoSnapContent’&lt;/p&gt;

&lt;p&gt;Notice the naming method is not consistent. The word &lt;strong&gt;Snap&lt;/strong&gt; comes before&lt;br&gt;
&lt;strong&gt;Photo&lt;/strong&gt;, but in this case, the word &lt;strong&gt;Photo&lt;/strong&gt; comes before the word &lt;strong&gt;Snap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SCSDK*&lt;em&gt;Snap&lt;/em&gt;&lt;strong&gt;Photo*&lt;br&gt;  SCSDK*Photo&lt;/strong&gt;&lt;em&gt;Snap&lt;/em&gt;*Content&lt;/p&gt;

&lt;p&gt;This same issue is repeated with these pairs of methods from Creative Kit:&lt;br&gt; &lt;br&gt;
‘SCSDKSnapVideo’ and ‘SCSDKVideoSnapContent’&lt;/p&gt;

&lt;p&gt;In ‘SCSDKSnapVideo’ the word &lt;strong&gt;Snap&lt;/strong&gt; comes before &lt;strong&gt;Video&lt;/strong&gt;, however here&lt;br&gt;
‘SCSDKVideoSnapContent’ the word &lt;strong&gt;Video&lt;/strong&gt; comes before the word &lt;strong&gt;Snap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Scan all documentation and sample code for accuracy&lt;/li&gt;
&lt;li&gt; Consider renaming such that the pairs are consistent&lt;/li&gt;
&lt;li&gt; Provide multiple paths for developers to learn about the change and conduct a
comprehensive documentation review&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have multiple code reviews and involve people in the organization with fresh&lt;br&gt;
eyes and perspectives&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A0P_WzVsrzHwHjYKG.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A0P_WzVsrzHwHjYKG.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6 — Login Scopes Information Misplaced
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to
&lt;a href="https://docs.snapchat.com/docs/login-kit/" rel="noopener noreferrer"&gt;https://docs.snapchat.com/docs/login-kit/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The entire section titled &lt;strong&gt;Understanding Scopes&lt;/strong&gt; seems misplaced. The section&lt;br&gt;
is the first section for Login Kit.&lt;/p&gt;

&lt;p&gt;Further, the section provides code for iOS Info.plist &lt;strong&gt;yet&lt;/strong&gt; this page is a&lt;br&gt;
generic page contains both iOS and Android instruction. So starting the document&lt;br&gt;
off with strictly iOS information is odd at best.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Move this text to the &lt;strong&gt;Getting Started&lt;/strong&gt; section on this page to a more logical&lt;br&gt;
location.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Test the documentation. Run “eat your own dogfood” testing sessions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AAVKd7RXnfSCUKcyK.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AAVKd7RXnfSCUKcyK.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7 — Embedded Binaries Documentation Can Be Replaced Or Augmented To Include
&lt;/h2&gt;

&lt;p&gt;Cocoapod&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to
&lt;a href="https://docs.snapchat.com/docs/login-kit/" rel="noopener noreferrer"&gt;https://docs.snapchat.com/docs/login-kit/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Inspect the &lt;strong&gt;Getting Started&lt;/strong&gt; section&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;In your app project in Xcode, add SCSDKCoreKit.framework and&lt;br&gt;
SCSDKLoginKit.framework into General — Embedded Binaries.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The above text is correct, yet incomplete. Snap Kit now offers a Cocoapod&lt;br&gt;
install solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add information about how to use the Cocoapod option for installing Snap Kit&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Put in place checklists, sign-offs, and workflows such that when a change occurs&lt;br&gt;
(such as releasing a cocoapod) others who have customer reach can act and review&lt;br&gt;
customer-facing assets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A_OSPtTa9JlCDDYAi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2A_OSPtTa9JlCDDYAi.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8 — Snap Kit SDK Naming
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to &lt;a href="https://github.com/SnapKit/SnapKit" rel="noopener noreferrer"&gt;https://github.com/SnapKit/SnapKit&lt;/a&gt;
or &lt;a href="http://snapkit.io/" rel="noopener noreferrer"&gt;http://snapkit.io/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The name of this well-established code line is SnapKit, which can cause&lt;br&gt;
confusion with Snap Kit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Although it is late, it is important to note this issue. SnapKit has existed for&lt;br&gt;
at least 4 years and is fairly popular with iOS developers. A google search&lt;br&gt;
prior to choosing the name of Snap Kit would have been wise. Further, if Snap is&lt;br&gt;
not using an outside name search service, it would be helpful to consider doing&lt;br&gt;
that for future naming&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run naming searches&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2ATdEUjfYdsF1JEb2t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2ATdEUjfYdsF1JEb2t.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9 — UI of Developer Portal Confusing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; With a user id and password login at
&lt;a href="http://kit.snapchat.com/" rel="noopener noreferrer"&gt;http://kit.snapchat.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AEk7Kh-GhwZuWxVXg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AEk7Kh-GhwZuWxVXg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This UI does not lend itself to a clear understanding that there are two&lt;br&gt;
distinct areas. The above image explains the problem best. It is not very clear&lt;br&gt;
that there are two sections here. There is no line between them and the title&lt;br&gt;
&lt;em&gt;App Info&lt;/em&gt; on the right side does not clearly denote the left side as applying&lt;br&gt;
to production (rather than development on the right side).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At a minimum, place a vertical line between the two areas &lt;em&gt;App Info&lt;/em&gt; and&lt;br&gt;
&lt;em&gt;Development App Info&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Also, change the titles of the OAUTH2 CLIENT ID fields so that they read&lt;br&gt;
**PRODUCTION **OAUTH2 CLIENT ID and **DEVELOPMENT **OAUTH2 CLIENT ID&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t assume anything. Involve professional Quality Engineers in &lt;strong&gt;all&lt;/strong&gt; aspects&lt;br&gt;
of the product launch. Hire UX/UI designers when a UX/UI is part of the product.&lt;br&gt;
And yes, consider anything customer facing — such as a dev portal — to be &lt;strong&gt;part&lt;br&gt;
of the product!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AGvPd0vyVc79b7vLQ.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F0%2AGvPd0vyVc79b7vLQ.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10 — Unlink Sessions Methods Do Not Include Thrown Errors
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to
&lt;a href="https://docs.snapchat.com/docs/login-kit/" rel="noopener noreferrer"&gt;https://docs.snapchat.com/docs/login-kit/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Inspect the information on unlinking Sessions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br&gt; Neither of the two methods throws errors in the case of unlink&lt;br&gt;
failure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCSDKLoginClient.unlinkCurrentSessionWithCompletion&lt;/li&gt;
&lt;li&gt;SCSDKLoginClient.unlinkAllSessionsWithCompletion&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Suggested Mitigation
&lt;/h3&gt;

&lt;p&gt;Include code to throw errors&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think through the use cases for the product. Think through the possible failure&lt;br&gt;
points.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2AGMVgcavj4mdFRxMwF4kqWw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2AGMVgcavj4mdFRxMwF4kqWw.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  11— Snap Kit Twitter Account Not Active Nor Informative For Devs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to &lt;a href="https://docs.snapchat.com/docs/" rel="noopener noreferrer"&gt;https://docs.snapchat.com/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Note the text&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;To stay up to date with our SDKs, see what’s new and follow @snapkit on Twitter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt; Review the tweets from @snapkit on Twitter&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Although the twitter account @snapkit was established on May 2018, and it is now&lt;br&gt;
September 2018, there are 4 total tweets. None are directed to software&lt;br&gt;
developers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The marketing team who owns this account needs to start producing and posting&lt;br&gt;
more content and the account should also post with information that reflects the&lt;br&gt;
“see what’s new” statement in the documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As with bug #7 and others, there must be a cohesive release strategy that&lt;br&gt;
includes all aspects of the product and its delivery to market. All departments&lt;br&gt;
that could have customer facing assets should be consulted&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2AXrfkf3IP0RDMI3wVlYaSCQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2AXrfkf3IP0RDMI3wVlYaSCQ.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  12 — API Reference For iOS First Paragraph Seems Out Of Date
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to
&lt;a href="https://docs.snapchat.com/docs/api/ios/" rel="noopener noreferrer"&gt;https://docs.snapchat.com/docs/api/ios/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Note the text&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This documentation assumes you already made contact with us&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think this text was written when Snap Kit was in beta or had a small and&lt;br&gt;
managed audience. And, the text is confusing. There are no instructions here&lt;br&gt;
about how someone makes contact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remove the sentence or, if contact is required, explain how and why&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Test the documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2ApDrmvNLp72HkYT9KhumJ1g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2ApDrmvNLp72HkYT9KhumJ1g.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  13— Snap Kit Support Boilerplate Not Helpful
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Send a support request to
&lt;a href="//mailto:snapkit-support@snap.com"&gt;snapkit-support@snap.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; After the initial automated response documented in bug #1 above and others, wait
for and then read the “live human” support response&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Chuck (Snap Connect) Hello there, Thanks for reporting this! In order for us to&lt;br&gt;
debug this better, could you please provide the following information&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- Username&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- Client ID&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- Specific URLs or assets used&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- Info.plist (if there’s no sensitive information) Code sample if possible&lt;br&gt;
Screen recording and or screenshots&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- IP address&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have sent a number of different requests to support and have seen this&lt;br&gt;
boilerplate response from Chuck. Since every SDK engagement is different, this&lt;br&gt;
text is not helpful. In face, I had asked a specific question about the&lt;br&gt;
developer portal and then saw this text. It made me feel that my support issue&lt;br&gt;
was not even read, and that the support tech did not bother to read or care&lt;br&gt;
about my issue.&lt;/p&gt;

&lt;p&gt;Either modify the text for inclusiveness, or change SOP such that support reps&lt;br&gt;
no longer use the boilerplate (or use it with greater thought)&lt;/p&gt;

&lt;p&gt;(IP Address .. really? For what? This isn’t an enterprise app.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Walk through mock customer experiences prior to release. Test the customer&lt;br&gt;
workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2ALXboWKmfr0857092m2rEWg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2ALXboWKmfr0857092m2rEWg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  14 — Missing Example Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to &lt;a href="https://github.com/Snap-Kit" rel="noopener noreferrer"&gt;https://github.com/Snap-Kit&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No code samples for Android&lt;/li&gt;
&lt;li&gt;One sample exists for iOs, but only covers Bitmoji&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Supply Example Code For All Kits and both iOS and Android&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over-support your target customer, rather than under-support. This is even more&lt;br&gt;
critical when the product is new and when the product is an important piece of&lt;br&gt;
the wider company strategy. Clearly Snap Kit is a critical part of Snap’s&lt;br&gt;
marketplace moves&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2A4xzADAmZ6Xuam0ir2l1uHQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F880%2F1%2A4xzADAmZ6Xuam0ir2l1uHQ.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  15 — Snap Kit Support (more) Boilerplate Not Helpful
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Send a support request to
&lt;a href="//mailto:snapkit-support@snap.com"&gt;snapkit-support@snap.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; After the initial automated response documented in bug #1 above and others, wait
for and then read the “live human” support response&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our team is investigating and will follow up if we need more information.&lt;br&gt;&lt;br&gt;
Thanks, Chuck&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This response does not include any information on timing for a response. The&lt;br&gt;
customer has no idea what to expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Either do not use boilerplate or change the boilerplate text to include verbiage&lt;br&gt;
for expectation setting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See bug #13 and others. Technical Support and Quality Assurance should act as&lt;br&gt;
the last line of defense for the customer prior to releasing any product&lt;/p&gt;

&lt;h2&gt;
  
  
  16 — Unexpected status code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Steps To Reproduce&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m working with snap support now on this. I do not currently know how to&lt;br&gt;
reproduce other than the fact that my code can reproduce this at will. The code&lt;br&gt;
segment related is:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let api = SCSDKSnapAPI(content: snap)

api.startSnapping { error in

if let error = error {
         print(error.localizedDescription)
     }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Snap Kit Server responded with an unexpected status code.&lt;/p&gt;

&lt;p&gt;2018–09–14 15:22:22.249561–0700 FunSnap[7881:4578160] [SnapKit]&lt;br&gt;
path=/v1/sdk/metrics/operational headers_subset={&lt;/p&gt;

&lt;p&gt;“X-Cloud-Trace-Context” = “D55DD084290C4941BB1149CE33521F98/0;o=1”;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Suggested Mitigation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Errors need to be human readable and text should, as much as possible, assist in
self-service troubleshooting&lt;/li&gt;
&lt;li&gt; Whatever the root cause is, there is a bug here&lt;/li&gt;
&lt;li&gt; Publish a Knowledge Base or other customer-facing self-service tool&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Snap’s release of Snap Kit is faulty in almost every conceivable aspect&lt;/p&gt;

&lt;p&gt;Business Lessons Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release management must bring all stakeholders to the table early in the release
process. They must also consult with these stakeholders throughout the release
cycle&lt;/li&gt;
&lt;li&gt;Stakeholders for a release include representatives from all customer-facing
departments as well as Quality Assurance&lt;/li&gt;
&lt;li&gt;Documentation is a part of the product and must undergo the same rigorous review
as any other part&lt;/li&gt;
&lt;li&gt;A web portal is part of the product and must undergo the same rigorous review as
any other part&lt;/li&gt;
&lt;li&gt;Conduct “eat your own dogfood” prior to releases&lt;/li&gt;
&lt;li&gt;Test the end to end customer experience, which includes technical support
engagement, website, social media platforms where you have an outlet,
documentation, licensing and more&lt;/li&gt;
&lt;li&gt;Conduct a “blind corner” review to help root out incomplete, inaccurate or out
of date documentation and announcements. For example, there may be code on
GitHub that requires updating.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If You Liked This Post, Try One Of These
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/snapchat-snapkit-developer-support-sadly-sad-89d63011c6ad" rel="noopener noreferrer"&gt;Snapchat Snapkit Developer Support Sadly
Sad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/introsnapkitdiy-d7b1b677c7d9" rel="noopener noreferrer"&gt;Introducing Snapchat Snapkit DIY
Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/the-very-broken-silicon-valley-hiring-process-and-how-to-fix-it-683e0c851f14" rel="noopener noreferrer"&gt;The Very Broken Silicon Valley Hiring Process And How To Fix
It&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contact
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://linkedin.com/in/brucebookman" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href="https://medium.com/@brucebookman" rel="noopener noreferrer"&gt;@&lt;/a&gt;brucebookman&lt;/li&gt;
&lt;li&gt;Mastodon: @&lt;a href="mailto:brucebookman@mastodon.technology"&gt;brucebookman@mastodon.technology&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bbookman" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/the-very-broken-silicon-valley-hiring-process-and-how-to-fix-it-683e0c851f14" rel="noopener noreferrer"&gt;←&lt;br&gt;
Previous&lt;/a&gt;&lt;br&gt;
| &lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/snapchat-snap-kit-sdk-tutorial-for-ios-swift-311863074bab" rel="noopener noreferrer"&gt;Next&lt;br&gt;
→&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/tag/ios?source=post" rel="noopener noreferrer"&gt;iOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/tag/snapkit?source=post" rel="noopener noreferrer"&gt;Snap Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/tag/snapchat?source=post" rel="noopener noreferrer"&gt;Snapchat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/tag/android?source=post" rel="noopener noreferrer"&gt;Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/tag/augmented-reality?source=post" rel="noopener noreferrer"&gt;Augmented Reality&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From a quick cheer to a standing ovation, clap to show how much you enjoyed this&lt;br&gt;
story.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://medium.com/@brucebookman" rel="noopener noreferrer"&gt;Bruce Bookman&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  [Adventures in iOS mobile app
&lt;/h2&gt;

&lt;p&gt;development](&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development?source=footer_card" rel="noopener noreferrer"&gt;https://medium.com/adventures-in-ios-mobile-app-development?source=footer_card&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;One iOS Swift developer's journey. Problems, solutions, opinion and more&lt;/p&gt;

</description>
      <category>snapchat</category>
      <category>snapkit</category>
      <category>mobiledevelopment</category>
      <category>ios</category>
    </item>
    <item>
      <title>Snapchat Snap Kit SDK Tutorial for iOS Swift</title>
      <dc:creator>bbookman</dc:creator>
      <pubDate>Tue, 21 Aug 2018 19:23:38 +0000</pubDate>
      <link>https://dev.to/bbookman/snapchat-snap-kit-sdk-tutorial-for-ios-swift-22ej</link>
      <guid>https://dev.to/bbookman/snapchat-snap-kit-sdk-tutorial-for-ios-swift-22ej</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/snapchat-snap-kit-sdk-tutorial-for-ios-swift-311863074bab" rel="noopener noreferrer"&gt;Original post on medium&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  About Snap Kit
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Snap Kit lets developers like you integrate some of Snapchat’s best features across your platform — and lets your community share their favorite moments from your app with their friends, and Snapchatters across the world! — Snapchat&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;The following tutorial assumes some familiarity with Xcode, Swift, and Cocoapods&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bbookman/SnapKitSample-iOS" rel="noopener noreferrer"&gt;Repository for this tutorial can be found here&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Snapchat Snap Kit Developer Portal
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Step 1
&lt;/h2&gt;

&lt;p&gt;If you don’t have a Snapchat account, &lt;a href="https://accounts.snapchat.com" rel="noopener noreferrer"&gt;register for one&lt;/a&gt; . Otherwise you can log in to the portal with your Snapchat credentials.&lt;/p&gt;

&lt;p&gt;Creating an app on the portal (really registering for OAUTH keys) is self explanatory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2
&lt;/h2&gt;

&lt;p&gt;Note / copy the value in &lt;strong&gt;Development App Info &amp;gt; OAUTH2 CLIENT ID&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h8ybym90igazdcmwwt7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h8ybym90igazdcmwwt7.png" alt="dev portal oath client id"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3
&lt;/h2&gt;

&lt;p&gt;While in the developer portal, add your app’s iOS Bundle ID (See &lt;a href="https://help.tune.com/marketing-console/finding-your-apps-package-name/" rel="noopener noreferrer"&gt;Finding Your App’s Package Name&lt;/a&gt; for help)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgwytrfjpapqyb11zm6t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgwytrfjpapqyb11zm6t.png" alt="location in dev portal for bundle id"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4
&lt;/h2&gt;

&lt;p&gt;Add at least one Redirect URL in the section Redirect URLs.&lt;/p&gt;

&lt;p&gt;You may choose any URL you wish as long as the URL conforms to these requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Must be unique (to the world of apps. Perhaps choose your name plus the app name)&lt;/li&gt;
&lt;li&gt;Must be in the format someschemename://somedestination&lt;/li&gt;
&lt;li&gt;Must be the same as the SCSDKRedirectUrl which you will set in your project’s Info.plist (instructions below). In other words, you will copy the value you add to the developer portal and paste it into Info.plist later in these instructions
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kq0y2c09i007xoijbr3.png" alt="redirect urls in portal"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Snap Kit SDK
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Step 5
&lt;/h2&gt;

&lt;p&gt;Initialize your project for cocoapods and add SnapSDK&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pod 'SnapSDK', :subspecs =&amp;gt; ['SCSDKLoginKit', 'SCSDKCreativeKit', 'SCSDKBitmojiKit']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then run&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pod install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  Info.plist
&lt;/h1&gt;

&lt;p&gt;Skip to the bottom of this section if you just want to get to the gist.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 6
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;SCSDKRedirectUrl&lt;/strong&gt; and the &lt;strong&gt;CFBundleURLSchemes&lt;/strong&gt; are related, as well as the value of the Redirect URL you added in the Snapchat Developer Portal.&lt;/p&gt;

&lt;p&gt;The values can be completely made up. As long as the values match and are unique (see below). For example, if my app is named This Crazy App I could set these values:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;CFBundleURLSchemes&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;thiscrazyapp&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;SCSDKRedirectUrl&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;thiscrazyapp://myapp&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then you would add &lt;strong&gt;thiscrazyapp://myapp&lt;/strong&gt; to the Snapchat Developer Portal in the Redirect URLs section by clicking the Add button to the right&lt;/p&gt;

&lt;p&gt;A note from a snapchat dev:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The redirect URL itself doesn’t need to have any meaning associated with it — so in general, the only real criteria would be to pick a URL with a scheme that is unlikely to collide with a scheme of another app.&lt;br&gt;
If your app already has a URL scheme that it uses, then you’d probably just want to reuse that. Otherwise, a URL scheme of yourfirstandlastname might work well for you. In your case then, you may want to use the redirect URL yourfirstandlastname://snap-kit/auth&lt;br&gt;
The string value for SCSDKClientId is the OATH2 CLIENT ID from the developer portal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;strong&gt;LSApplicationQueriesSchemes&lt;/strong&gt; would also need to be added to a new Info.plist.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;LSApplicationQueriesSchemes (string-array): This should contain snapchat, bitmoji-sdk, and itms-apps.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;LSApplicationQueriesSchemes&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;itms-apps&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;snapchat&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;bitmoji-sdk&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Add all three &lt;strong&gt;SCSDKScopes&lt;/strong&gt; (there is really no good reason not to)&lt;/p&gt;

&lt;p&gt;Login Kit offers the following scopes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://auth.snapchat.com/oauth2/api/user.external_id:" rel="noopener noreferrer"&gt;https://auth.snapchat.com/oauth2/api/user.external_id:&lt;/a&gt; Grants access to a stable user ID specific to your app&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://auth.snapchat.com/oauth2/api/user.display_name:" rel="noopener noreferrer"&gt;https://auth.snapchat.com/oauth2/api/user.display_name:&lt;/a&gt; Grants access to the user's Snapchat display name&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://auth.snapchat.com/oauth2/api/user.bitmoji.avatar:" rel="noopener noreferrer"&gt;https://auth.snapchat.com/oauth2/api/user.bitmoji.avatar:&lt;/a&gt; Grants access to the user's Bitmoji avatar; toggleable by user
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;SCSDKScopes&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;https://auth.snapchat.com/oauth2/api/user.external_id&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;https://auth.snapchat.com/oauth2/api/user.display_name&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;https://auth.snapchat.com/oauth2/api/user.bitmoji.avatar&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Info.plist gist:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h1&gt;
  
  
  Login Kit
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffad8i7gpfkwhn1ljfl6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffad8i7gpfkwhn1ljfl6q.png" alt="Login Kit logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1
&lt;/h2&gt;

&lt;p&gt;Anyplace you need the Login Kit code (such as the initial ViewController)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import SCSDKLoginKit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2
&lt;/h2&gt;

&lt;p&gt;This code needs to be added in the AppDelegate.swift file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;UIApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;open&lt;/span&gt; &lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;UIApplicationOpenURLOptionsKey&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[:])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kt"&gt;SCSDKLoginClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 3
&lt;/h1&gt;

&lt;p&gt;Choose a login button and the code that goes along with it&lt;/p&gt;

&lt;p&gt;Snapchat Official Login Button&lt;/p&gt;

&lt;p&gt;Position the official button &lt;a href="https://theswiftdev.com/2017/10/31/ios-auto-layout-tutorial-programmatically/" rel="noopener noreferrer"&gt;as you like in code&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;loginButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKLoginButton&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Custom Login Button&lt;/p&gt;

&lt;p&gt;Consult the &lt;a href="https://docs.snapchat.com/docs/design-guidelines/" rel="noopener noreferrer"&gt;Snapchat Design Guidelines&lt;/a&gt; for button UI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;@IBAction&lt;/span&gt; &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;loginButtonTapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;SCSDKLoginClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;localizedDescription&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetchSnapUserInfo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;//example code&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Snapchat does not gather much data from users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User ID (A Snapchat internal generated value)&lt;/li&gt;
&lt;li&gt;Display Name (User’s chosen display name)&lt;/li&gt;
&lt;li&gt;Bitmoji (Avatar, if user has created one)
Notice there is no ability to gather email address or real name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use &lt;strong&gt;SDSDKLoginClient.fetchUserData&lt;/strong&gt; to get the user data. The code below is one of many approaches to parsing the values returned.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;fetchSnapUserInfo&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;graphQLQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"{me{displayName, bitmoji{avatar}}}"&lt;/span&gt;
    &lt;span class="kt"&gt;SCSDKLoginClient&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetchUserData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nv"&gt;withQuery&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;graphQLQuery&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nv"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nv"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;userInfo&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;userInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="kt"&gt;JSONSerialization&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;withJSONObject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prettyPrinted&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;userEntity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="kt"&gt;JSONDecoder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;UserEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="kt"&gt;DispatchQueue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goToLoginConfirm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userEntity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;isUserLoggedOut&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;localizedDescription&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4
&lt;/h2&gt;

&lt;p&gt;For logout or “unlink”&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;
&lt;span class="kt"&gt;SCSDKLoginClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unlinkCurrentSessionWithCompletion&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
  &lt;span class="c1"&gt;// do something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Creative Kit
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zwf12jh8poe0vb4jwvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zwf12jh8poe0vb4jwvs.png" alt="creative kit logo"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Users must be logged into Snapchat to use Creative Kit’s features in your app&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  SCSDKSnapPhoto and SCSDKPhotoSnapContent
&lt;/h2&gt;

&lt;p&gt;Pass photos to the Snapchat app&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SCSDKSnapPhoto&lt;/strong&gt; is a photo that the user can get from the camera, photo library, or your app and pass to Snapchat. This class lets you initialize images that users can share to Snapchat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SCSDKPhotoSnapContent&lt;/strong&gt; is an implementation of the SCSDKSnapContent protocol. It provides a way to model a photo Snap for sharing to Snapchat.&lt;/p&gt;

&lt;p&gt;See &lt;a href="https://docs.snapchat.com/docs/api/ios/" rel="noopener noreferrer"&gt;Snapchat iOS API Reference&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;SCSDKCreativeKit&lt;/span&gt;
&lt;span class="c1"&gt;// Copied from Snapchat Documentation&lt;/span&gt;

&lt;span class="cm"&gt;/* Main image content to be used in the Snap */&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;snapImage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="cm"&gt;/* Set your image here */&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;photo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKSnapPhoto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;snapImage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;photoContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKSnapPhotoContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;snapPhoto&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// Alternately, you can set the photo using a URL&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;photo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKSnapPhoto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;imageUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;snapImageUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pass a photo with a caption, sticker and url&lt;/p&gt;

&lt;p&gt;You can choose to add a caption, sticker, or URL attachment to a set photo or video.&lt;/p&gt;

&lt;p&gt;Conditions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only one sticker is allowed.&lt;/li&gt;
&lt;li&gt;A still sticker must be a PNG 1MB or smaller.&lt;/li&gt;
&lt;li&gt;An animated sticker must be a GIF or WebP (preferred) 1MB or smaller.&lt;/li&gt;
&lt;li&gt;Captions are limited to 250 characters.&lt;/li&gt;
&lt;li&gt;The attachment URL must be a properly formatted URL in string format.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Copied from Snapchat Documentation (modified for clarity)&lt;/span&gt;

&lt;span class="cm"&gt;/* Stickers to be used in Snap */&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;stickerImage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="cm"&gt;/* prepare a sticker image */&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;sticker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKSnapSticker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;stickerImage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stickerImage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="cm"&gt;/* Alternatively, use a URL instead */&lt;/span&gt;
&lt;span class="c1"&gt;// let sticker = SCSDKSnapSticker(stickerUrl: stickerImageUrl, isAnimated: false)&lt;/span&gt;
&lt;span class="c1"&gt;// Caption&lt;/span&gt;
&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;caption&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"This is a caption"&lt;/span&gt;
&lt;span class="c1"&gt;// URL&lt;/span&gt;
&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attachmentUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://myawsomeappurl.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SCSDKSnapVideo and SCSDKVideoSnapContent
&lt;/h2&gt;

&lt;p&gt;Pass a video to the Snapchat app. Stickers, captions and URLs follow the same patterns as above for photos. See &lt;a href="https://docs.snapchat.com/docs/creative-kit/" rel="noopener noreferrer"&gt;Snapchat Creative Kit Documentation&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;videoUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="cm"&gt;/* prepare a local video URL */&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKSnapVideo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;videoUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;videoUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;videoContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKSnapVideoContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;snapVideo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sending your photo, video, or sticker to Snapchat&lt;br&gt;
The final step is connecting to Snapchat. Use the SCSDKSnapAPI interface to let your users start sending their creations to Snapchat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKSnapAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startSnapping&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;localizedDescription&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// success&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Bitmoji Kit
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqhk0bv00pejt0x0qvp8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqhk0bv00pejt0x0qvp8.png" alt="bitmoji kit logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Bitmoji (Snapchat avatar)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Users must be logged into Snapchat to use Bitmoji Kit’s features in your app&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;See also &lt;a href="http://snapchat%20bitmoji%20sample%20app/" rel="noopener noreferrer"&gt;Snapchat’s official Bitmoji Sample App&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiKit&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;iconView&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiIconView&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Sticker Picker
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27h8229pvq71xszyyz5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27h8229pvq71xszyyz5d.png" alt="sicker picker UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To add the sticker picker UI, create a sticker picker view, and add a delegate to be notified whenever a user selects a sticker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Code sample copied from Snapchat docs&lt;/span&gt;
&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiKit&lt;/span&gt;

&lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;viewDidLoad&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;viewDidLoad&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
   &lt;span class="o"&gt;...&lt;/span&gt;
   &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;stickerPickerVC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiStickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
   &lt;span class="n"&gt;stickerPickerVC&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delegate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;

   &lt;span class="nf"&gt;addChildViewController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stickerPickerVC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addSubview&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stickerPickerVC&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="n"&gt;stickerPickerVC&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;didMove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;toParentViewController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;bitmojiStickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;stickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiStickerPickerView&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;didSelectBitmojiWithURL&lt;/span&gt; &lt;span class="nv"&gt;bitmojiURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// do something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Optional delegate method for listening to search field&lt;/span&gt;
&lt;span class="c1"&gt;// focus changes&lt;/span&gt;
&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;bitmojiStickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;stickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiStickerPickerView&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                                        &lt;span class="n"&gt;searchFieldFocusDidChangeWithFocus&lt;/span&gt; &lt;span class="nv"&gt;hasFocus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// do something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OR&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kt"&gt;The&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="n"&gt;below&lt;/span&gt; &lt;span class="n"&gt;retrieves&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;bitmoji&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;scene&lt;/span&gt;

&lt;span class="c1"&gt;//Code contained in this article's sample app&lt;/span&gt;
&lt;span class="kd"&gt;extension&lt;/span&gt; &lt;span class="kt"&gt;CameraViewController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiStickerPickerViewControllerDelegate&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;bitmojiStickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;stickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiStickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;didSelectBitmojiWithURL&lt;/span&gt; &lt;span class="nv"&gt;bitmojiURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;bitmojiSelectionView&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeFromSuperview&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;UIImage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bitmojiURL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;DispatchQueue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setImageToScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;bitmojiStickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;stickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCSDKBitmojiStickerPickerViewController&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;searchFieldFocusDidChangeWithFocus&lt;/span&gt; &lt;span class="nv"&gt;hasFocus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Story Kit
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82voq9xauv63u2iyxlhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82voq9xauv63u2iyxlhi.png" alt="story kit logo"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Story Kit is in Beta as of this post date 08/21/18&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  I Need Love
&lt;/h1&gt;

&lt;p&gt;Did you like this post?  Hearts, Unicorns, Bookmarks and Shares make me happy!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwbbq0yhdjpsv23odeou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwbbq0yhdjpsv23odeou.png" alt="hearts, unicorns, bookmark, share"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Contact:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/saganone1" rel="noopener noreferrer"&gt;@saganone1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development" rel="noopener noreferrer"&gt;Medium - Adventures in iOS Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codementor.io/bbookman" rel="noopener noreferrer"&gt;Codementor.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sagan.one" rel="noopener noreferrer"&gt;Sagan.one&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.patreon.com/saganone" rel="noopener noreferrer"&gt;Patreon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://saganone.quora.com/" rel="noopener noreferrer"&gt;Quora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bbookman.github.io/" rel="noopener noreferrer"&gt;Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bbookman" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/bbookman"&gt;Dev.to&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;References&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.snapchat.com/docs/" rel="noopener noreferrer"&gt;Snapchat Snap Kit Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bbookman/Snapchat-Snap-Kit-DIY-Docs" rel="noopener noreferrer"&gt;Snapchat DIY Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.snapchat.com/docs/api/ios/" rel="noopener noreferrer"&gt;Snapchat iOS API Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.snapchat.com/docs/design-guidelines/" rel="noopener noreferrer"&gt;Snapchat Design Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bbookman/SnapKitSample-iOS" rel="noopener noreferrer"&gt;You can find the Github repository for this tutorial here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Snap-Kit/bitmoji-sample" rel="noopener noreferrer"&gt;Snapchat Bitmoji Sample App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bbookman/Snapchat-Snap-Kit-Demo-Here" rel="noopener noreferrer"&gt;Snapchat Map Sticker Demo featuring Here maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>snapchat</category>
      <category>snapkit</category>
      <category>swift</category>
      <category>ios</category>
    </item>
    <item>
      <title>Snapchat Snap Kit Central</title>
      <dc:creator>bbookman</dc:creator>
      <pubDate>Sat, 11 Aug 2018 18:09:50 +0000</pubDate>
      <link>https://dev.to/bbookman/snapchat-snap-kit-central-4bpo</link>
      <guid>https://dev.to/bbookman/snapchat-snap-kit-central-4bpo</guid>
      <description>

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Os_q9z-olHQ"&gt; &lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Interested in integrating Snapchat elements into your iOS or Android apps?  Come by  - contribute and learn.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg"&gt;&lt;a href="https://github.com/bbookman"&gt;bbookman&lt;/a&gt; / &lt;a href="https://github.com/bbookman/Snapchat-Snap-Kit-DIY-Docs"&gt;Snapchat-Snap-Kit-DIY-Docs&lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;&lt;/h3&gt;
  &lt;/div&gt;
&lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
Contents&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bbookman/Snapchat-Snap-Kit-DIY-Docs/wiki"&gt;Just Get Me To The Good Stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Purpose&lt;/li&gt;
&lt;li&gt;Open Issues&lt;/li&gt;
&lt;li&gt;Contributing&lt;/li&gt;
&lt;li&gt;Bugs and Feature Requests&lt;/li&gt;
&lt;li&gt;Contact&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Purpose&lt;/h2&gt;
&lt;p&gt;Snapchat’s Snap Kit is new and there are holes in the documentation. As developers implement Snap Kit, they will find answers and gain best practices.  This document exists to help developers obtain success with Snap Kit.&lt;/p&gt;
&lt;h3&gt;
Copying Snap Kit Documentation&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://github.com/bbookman/Snapchat-Snap-Kit-DIY-Docs/wiki"&gt;wiki for this repository&lt;/a&gt; will contain copy/paste from &lt;a href="https://docs.snapchat.com/docs/" rel="nofollow"&gt;Snapkit documentation&lt;/a&gt;. The purpose of which is to make it easy to see what is there as well as what should be there.  Contributsions from sources other than the Snap Kit documentation will be noted as such.&lt;/p&gt;
&lt;p&gt;For text that did not orignate from Snapchat, two markers are inserted:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DIY INSERT START&lt;/li&gt;
&lt;li&gt;DIY INSERT END&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Open issues&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In this repository wiki you will see a link &lt;code&gt;Pending Snap Support&lt;/code&gt; which indicates a question has been filed with Snapchat support and is awaiting…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
&lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/bbookman/Snapchat-Snap-Kit-DIY-Docs"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



</description>
      <category>snapchat</category>
      <category>snapkit</category>
      <category>ios</category>
      <category>swift</category>
    </item>
    <item>
      <title>Bad Product Ideas</title>
      <dc:creator>bbookman</dc:creator>
      <pubDate>Tue, 31 Jul 2018 19:09:18 +0000</pubDate>
      <link>https://dev.to/bbookman/bad-product-ideas-1dbn</link>
      <guid>https://dev.to/bbookman/bad-product-ideas-1dbn</guid>
      <description>&lt;p&gt;&lt;a href="http://frame.bloglovin.com/?post=6443719287&amp;amp;blog=1029&amp;amp;frame_type=none"&gt;PeerTube, the “Decentralized YouTube”, succeeds in crowdfunding&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm seeing folly all over the startup and tech landscape.  The Yuser app wants to be the next Facebook - with the added wrinkle that users get blockchain coin for eyeball grabbing content and no advertising.  And now PeerTube promises to break YouTubes' grip on video.&lt;/p&gt;

&lt;p&gt;Sorry PeerTube, I don't think it will happen.  You are just a new Napster, and we all know what happened to Napster.  Sorry Yuser, the cost of policing your platform will eat you alive.&lt;/p&gt;

&lt;p&gt;The bottom line is that PeerTube and Yuser have the same fundamental problem: user generated content with next to zero policing.  Both are designed with little to no oversight built in.  Because of this, all of the worst of humanity will spill into these communities.  They will become cesspools of trash.&lt;/p&gt;

&lt;p&gt;I see a new security paradigm coming.  Yes we worry about DDoS attacks and fishing.   And the new security frontier is security from the nastiness of humanity.  PeerTube and Yuser will either have to spend tons of money securing their user generated footprints or be relegated the the corners of the internet where porn, terrorism, human trafficking, arms sales, and NeoNazi's find refuge.&lt;/p&gt;

&lt;p&gt;Have they never heard of 4chan?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Snapchat Snapkit Developer Support Sadly Sad</title>
      <dc:creator>bbookman</dc:creator>
      <pubDate>Tue, 31 Jul 2018 19:08:52 +0000</pubDate>
      <link>https://dev.to/bbookman/snapchat-snapkit-developer-support-sadly-sad-23p2</link>
      <guid>https://dev.to/bbookman/snapchat-snapkit-developer-support-sadly-sad-23p2</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/adventures-in-ios-mobile-app-development/snapchat-snapkit-developer-support-sadly-sad-89d63011c6ad"&gt;Original post on Medium&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1 of a periodically updated diary of my attempts to work with Snapchat’s Snapkit
&lt;/h2&gt;

&lt;p&gt;As an iOS Developer I thought it would be interesting to try to add Snapchat’s Snapkit features to an app I have under development.&lt;/p&gt;

&lt;p&gt;Snapchat is playing catch-up in a race to keep its platform relevant and wants software developers to embrace its tools. Facebook and Twitter have long had development kits available for apps such that logging in to an app with Facebook and Twitter is commonplace. And posting to both is built in to probably thousands of apps.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C0EFyTZq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2ANNZQBVFov8g_H1pOWzQ7mw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C0EFyTZq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2ANNZQBVFov8g_H1pOWzQ7mw.png" alt="Snapkit options"&gt;&lt;/a&gt;&lt;br&gt;
After just scratching the surface of the offerings, I am not impressed with Snapchat’s documentation nor support.&lt;/p&gt;
&lt;h3&gt;
  
  
  Oh for the love of good documentation
&lt;/h3&gt;

&lt;p&gt;These are the very first lines of the &lt;a href="https://docs.snapchat.com/docs/api/ios/"&gt;iOS API Reference&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This documentation assumes you already made contact with us. The Snap Kit developer portal is the place for adding your application, exchanging keys, and getting set up with the proper API credentials.&lt;br&gt;
It is not at all clear to me how or why one would “make contact” with Snapchat. I suspect this document is out of date and that it was written when Snapchat was working with partners. As far as I can tell, the API is now completely open to anyone interested. So I’m either wrong and need to contact Snapchat (How?) or this very first paragraph is utterly misleading and out of date.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next up I thought I would integrate Snapchat login. My app already has authentication via Google, Twitter and Facebook (do you see that Snapchat… you need to blow me away just to enter the game)&lt;/p&gt;

&lt;p&gt;Here’s some instruction from the Login Kit documentation&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G7JuIfbD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2AzPAVeRhM0t-JEAwS9qhhLA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G7JuIfbD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2AzPAVeRhM0t-JEAwS9qhhLA.png" alt="info.plist instructions"&gt;&lt;/a&gt;&lt;br&gt;
This line about SCSDKRedirectUrl is mind boggling&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCSDKRedirectUrl (string): The URL that will handle and complete login requests; must be a valid URL in the form &lt;strong&gt;foo://bar—without bar&lt;/strong&gt;, redirects will fail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m sorry, what? What URL will complete and handle the login? And what does “foo://bar” without the bar mean? And if it means what I think it does — why would you write something like that? (I think it means .. ‘someurl://’)&lt;/p&gt;

&lt;p&gt;I guess as a developer I’m supposed to know what the URL syntax should look like. But wait, Snapchat has a few &lt;a href="https://github.com/Snap-Kit"&gt;GitHub repositories&lt;/a&gt; with examples.&lt;/p&gt;

&lt;p&gt;But wait, only one of the examples is written in Swift (remember I’m developing for iOS).&lt;/p&gt;

&lt;p&gt;Since I like to try to solve my own problems, I thought perhaps the sample app would shed some light on the mysteries of SCSDKRedirectURL. This URL is supposed to go into the info.plist. Let’s see what the example app from Snapchat has in the info.plist&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;      
      &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;CFBundleTypeRole&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;Editor&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;CFBundleURLSchemes&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- Insert your redirect url scheme here --&amp;gt;&lt;/span&gt;    
      &lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fantastic, that clears things right up.&lt;/p&gt;

&lt;p&gt;As I was already in GitHub and already looking at the sample app supplied by Snapchat, I thought I’d file this lack of clarity as a bug against the sample repo. It’s issue #3 &lt;a href="https://github.com/Snap-Kit/bitmoji-sample/issues/3"&gt;Redirect URL—Clarity in documentation please&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Someone named David cleared things up in response to the bug.  He says&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So if you registered my-app://auth/snap then you would have this entry in your Info.plist:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;SCSDKRedirectUrl&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;my-app://auth/snap&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
as well as:
&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;CFBundleURLTypes&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;CFBundleTypeRole&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;Editor&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;CFBundleURLSchemes&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;my-app&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As a side note, Snapchat support has no idea how to handle Snapkit requests. I can’t stop giggling when I read the response when I ask if they are the right folks to get help from.. “We’ll need to look further into this”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yes, yes you will!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bx2vUx-3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2AgCTL9i4szIqePqvcSfRr2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bx2vUx-3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2AgCTL9i4szIqePqvcSfRr2g.png" alt="twitter response from snapchat"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>snapchat</category>
      <category>snapkit</category>
    </item>
  </channel>
</rss>
