CINXE.COM
Survicate iOS SDK - Survicate for Developers
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Survicate iOS SDK - Survicate for Developers</title><meta property="og:title" content="Survicate iOS SDK - Survicate for Developers"/><link rel="icon" href="/favicon.ico"/><meta name="next-head-count" content="5"/><script src="https://assets.survicate.com/cookiebot/cookiebot.js"></script><script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="06ba1b84-2c3a-4a3a-a48b-701a33e09f99" type="text/javascript"></script><script>(function (w){ var s = document.createElement('script'); s.src = '//survey.survicate.com/workspaces/LGakrWdnSilCZUzEnesXwhJCVKgyHKMP/web_surveys.js'; s.async = true; var e = document.getElementsByTagName('script')[0]; e.parentNode.insertBefore(s, e); })(window);</script><script>window.intercomSettings = {app_id: "oevz15jg"};</script><script>(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/oevz15jg';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script><script>!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){if(window.analytics.initialized)return window.analytics[e].apply(window.analytics,arguments);var i=Array.prototype.slice.call(arguments);i.unshift(e);analytics.push(i);return analytics}};for(var i=0;i<analytics.methods.length;i++){var key=analytics.methods[i];analytics[key]=analytics.factory(key)}analytics.load=function(key,i){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://a.survicate.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=i};analytics._writeKey="kqFo7DUMWTPJjPV2PBAMZbFcC09du7Am";;analytics.SNIPPET_VERSION="4.16.1"; analytics.load("kqFo7DUMWTPJjPV2PBAMZbFcC09du7Am",{ integrations: { "Segment.io": { apiHost: "a.survicate.com/v1" }}}); analytics.page(); }}();</script><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://gtm.survicate.com/?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-M9DM5CP5');</script><link rel="preload" href="/_next/static/css/d6ebcdb29b0eb676.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d6ebcdb29b0eb676.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-36d12a75f0098f30.js" defer=""></script><script src="/_next/static/chunks/framework-e952fed463eb8e34.js" defer=""></script><script src="/_next/static/chunks/main-adb71b24fa36fa6f.js" defer=""></script><script src="/_next/static/chunks/pages/_app-070fa690b0657d5b.js" defer=""></script><script src="/_next/static/chunks/pages/mobile-sdk/ios-3e07ca28a88dff2b.js" defer=""></script><script src="/_next/static/oRxhVlM_MccxFN_yHU--1/_buildManifest.js" defer=""></script><script src="/_next/static/oRxhVlM_MccxFN_yHU--1/_ssgManifest.js" defer=""></script></head><body class="bg-white antialiased dark:bg-zinc-900"><div id="__next"><div class="lg:ml-72 xl:ml-80"><header class="contents lg:pointer-events-none lg:fixed lg:inset-0 lg:z-40 lg:flex"><div class="contents lg:pointer-events-auto lg:block lg:w-72 lg:overflow-y-auto lg:border-r lg:border-zinc-900/10 lg:px-6 lg:pt-4 lg:pb-8 lg:dark:border-white/10 xl:w-80"><div class="hidden lg:flex"><a aria-label="Home" href="/"><img src="/logoDark.svg" alt="Survicate logo" width="200" height="37" class="logo"/></a></div><div class="fixed inset-x-0 top-0 z-50 flex h-14 items-center justify-between gap-12 px-4 transition sm:px-6 lg:left-72 lg:z-30 lg:px-8 xl:left-80 backdrop-blur-sm dark:backdrop-blur lg:left-72 xl:left-80 bg-white/[var(--bg-opacity-light)] dark:bg-zinc-900/[var(--bg-opacity-dark)]" style="--bg-opacity-light:0.5;--bg-opacity-dark:0.2"><div class="absolute inset-x-0 top-full h-px transition bg-zinc-900/7.5 dark:bg-white/7.5"></div><div class="hidden lg:block lg:max-w-md lg:flex-auto"><button type="button" class="hidden h-8 w-full items-center gap-2 rounded-full bg-white pl-2 pr-3 text-sm text-zinc-500 ring-1 ring-zinc-900/10 transition hover:ring-zinc-900/20 dark:bg-white/5 dark:text-zinc-400 dark:ring-inset dark:ring-white/10 dark:hover:ring-white/20 lg:flex focus:[&:not(:focus-visible)]:outline-none"><svg viewBox="0 0 20 20" fill="none" aria-hidden="true" class="h-5 w-5 stroke-current"><path stroke-linecap="round" stroke-linejoin="round" d="M12.01 12a4.25 4.25 0 1 0-6.02-6 4.25 4.25 0 0 0 6.02 6Zm0 0 3.24 3.25"></path></svg>Search Survicate for Developers...<kbd class="ml-auto text-2xs text-zinc-400 dark:text-zinc-500"><kbd class="font-sans"></kbd><kbd class="font-sans">K</kbd></kbd></button></div><div class="flex items-center gap-5 lg:hidden"><button type="button" class="flex h-6 w-6 items-center justify-center rounded-md transition hover:bg-zinc-900/5 dark:hover:bg-white/5" aria-label="Toggle navigation"><svg viewBox="0 0 10 9" fill="none" stroke-linecap="round" aria-hidden="true" class="w-2.5 stroke-zinc-900 dark:stroke-white"><path d="M.5 1h9M.5 8h9M.5 4.5h9"></path></svg></button><a aria-label="Home" href="/"><img src="/logoDark.svg" alt="Survicate logo" width="200" height="37" class="logo"/></a></div><div class="flex items-center gap-5"><nav class="hidden md:block"><ul class="flex items-center gap-8"><li><a target="_blank" class="text-sm leading-5 text-zinc-600 transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="https://survicate.com/">Homepage</a></li><li><a target="_blank" class="text-sm leading-5 text-zinc-600 transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="https://help.survicate.com/">Help Center</a></li><li><a target="_blank" class="text-sm leading-5 text-zinc-600 transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="https://status.survicate.com/">Application status</a></li><li><a target="_blank" class="text-sm leading-5 text-zinc-600 transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="https://panel.survicate.com/">Log in</a></li></ul></nav><div class="hidden md:block md:h-5 md:w-px md:bg-zinc-900/10 md:dark:bg-white/15"></div><div class="flex gap-4"><div class="contents lg:hidden"><button type="button" class="flex h-6 w-6 items-center justify-center rounded-md transition hover:bg-zinc-900/5 dark:hover:bg-white/5 lg:hidden focus:[&:not(:focus-visible)]:outline-none" aria-label="Search Survicate for Developers"><svg viewBox="0 0 20 20" fill="none" aria-hidden="true" class="h-5 w-5 stroke-zinc-900 dark:stroke-white"><path stroke-linecap="round" stroke-linejoin="round" d="M12.01 12a4.25 4.25 0 1 0-6.02-6 4.25 4.25 0 0 0 6.02 6Zm0 0 3.24 3.25"></path></svg></button></div><button type="button" class="flex h-6 w-6 items-center justify-center rounded-md transition hover:bg-zinc-900/5 dark:hover:bg-white/5" aria-label="Toggle dark mode"><svg viewBox="0 0 20 20" fill="none" aria-hidden="true" class="h-5 w-5 stroke-zinc-900 dark:hidden"><path d="M12.5 10a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0Z"></path><path stroke-linecap="round" d="M10 5.5v-1M13.182 6.818l.707-.707M14.5 10h1M13.182 13.182l.707.707M10 15.5v-1M6.11 13.889l.708-.707M4.5 10h1M6.11 6.111l.708.707"></path></svg><svg viewBox="0 0 20 20" fill="none" aria-hidden="true" class="hidden h-5 w-5 stroke-white dark:block"><path d="M15.224 11.724a5.5 5.5 0 0 1-6.949-6.949 5.5 5.5 0 1 0 6.949 6.949Z"></path></svg></button></div></div></div><nav class="hidden lg:mt-10 lg:block"><ul><li class="relative mt-6 md:mt-0"><h2 class="text-xs font-semibold text-zinc-900 dark:text-white"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/"><span class="truncate">Mobile SDK</span></a></h2><div class="relative mt-3 pl-2"><div class="absolute inset-x-0 top-0 bg-zinc-800/2.5 will-change-transform dark:bg-white/2.5" style="border-radius:8px;height:32px;top:0;opacity:0"></div><div class="absolute inset-y-0 left-2 w-px bg-zinc-900/10 dark:bg-white/5"></div><div class="absolute left-2 h-6 w-px bg-emerald-500" style="top:4px;opacity:1"></div><ul class="border-l border-transparent"><li class="relative"><a aria-current="page" class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-900 dark:text-white" href="/mobile-sdk/ios/"><span class="truncate">iOS SDK</span></a><ul role="list" style="opacity:1"><li><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-7 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/ios/#installation"><span class="truncate">Installation</span></a></li><li><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-7 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/ios/#configuration"><span class="truncate">Configuration</span></a></li><li><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-7 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/ios/#using-sdk"><span class="truncate">Using SDK</span></a></li><li><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-7 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/ios/#changelog"><span class="truncate">Changelog</span></a></li></ul></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/android/"><span class="truncate">Android SDK</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/react-native/"><span class="truncate">React Native SDK</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/flutter/"><span class="truncate">Flutter SDK</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/unity/"><span class="truncate">Unity SDK</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/segment-integration/"><span class="truncate">Segment Integration</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mobile-sdk/uxcam-integration/"><span class="truncate">UXCam Integration</span></a></li></ul></div></li><li class="relative mt-6"><h2 class="text-xs font-semibold text-zinc-900 dark:text-white"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/javascript/"><span class="truncate">JavaScript SDK</span></a></h2><div class="relative mt-3 pl-2"><div class="absolute inset-y-0 left-2 w-px bg-zinc-900/10 dark:bg-white/5"></div><ul class="border-l border-transparent"><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/javascript/installation/"><span class="truncate">Installation</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/javascript/methods/"><span class="truncate">Methods</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/javascript/events/"><span class="truncate">Event Listeners</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/javascript/js-sdk-changelog/"><span class="truncate">Changelog</span></a></li></ul></div></li><li class="relative mt-6"><h2 class="text-xs font-semibold text-zinc-900 dark:text-white"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/data-export/"><span class="truncate">Data Export API</span></a></h2><div class="relative mt-3 pl-2"><div class="absolute inset-y-0 left-2 w-px bg-zinc-900/10 dark:bg-white/5"></div><ul class="border-l border-transparent"><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/data-export/setup/"><span class="truncate">Setup</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/data-export/survey/"><span class="truncate">Survey</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/data-export/response/"><span class="truncate">Response</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/data-export/respondent/"><span class="truncate">Respondent</span></a></li></ul></div></li><li class="relative mt-6"><h2 class="text-xs font-semibold text-zinc-900 dark:text-white"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/webhooks/"><span class="truncate">Webhooks</span></a></h2><div class="relative mt-3 pl-2"><div class="absolute inset-y-0 left-2 w-px bg-zinc-900/10 dark:bg-white/5"></div><ul class="border-l border-transparent"><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/webhooks/security/"><span class="truncate">Security</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/webhooks/events/"><span class="truncate">Events</span></a></li><li class="relative"><a class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/webhooks/answer-types/"><span class="truncate">Answer types</span></a></li></ul></div></li><li class="sticky bottom-0 z-10 mt-6 min-[416px]:hidden"><a class="inline-flex gap-0.5 justify-center overflow-hidden text-sm font-medium transition rounded-full bg-zinc-900 py-1 px-3 text-white hover:bg-zinc-700 dark:bg-emerald-500 dark:text-white dark:hover:bg-emerald-400 w-full" href="/mobile-sdk/ios/#">Sign in</a></li></ul></nav></div></header><div class="relative px-4 pt-14 sm:px-6 lg:px-8"><main class="py-16"><article class="prose dark:prose-invert"><h1>Survicate iOS SDK</h1> <div class="inline-flex"><img class="mr-5" src="https://img.shields.io/badge/platform-iOS-green.svg"/><img class="mr-5" src="https://img.shields.io/cocoapods/v/Survicate"/><img class="mr-5" src="https://img.shields.io/badge/package%20manager-compatible-green.svg?logo=Swift"/><img src="https://img.shields.io/github/v/tag/Survicate/survicate-ios-sdk"/></div> <p>The iOS SDK is distributed in a binary version and developed using Swift 5.7. For apps downloaded from the App Store, the Survicate iOS SDK adds ~ 7.2MB to your uncompressed app size on device. Note that the SDK features a Time To Live (TTL) mechanism of 60 seconds. This means any modifications made to your survey will be reflected on your respondents' devices after a delay of up to 60 seconds.</p> <h3 id="requirements" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#requirements">Requirements</a></h3> <ul> <li>Using Survicate Mobile SDK requires an account at <a href="https://survicate.com">survicate.com</a>. You can create your account <a href="https://panel.survicate.com/signup">here</a> for free, or become invited to your company account by one of your colleagues.</li> <li>Xcode 14 is required to to build iOS SDK.</li> <li>Respondent's device running iOS 12 or above.</li> </ul> <div class="my-6 flex items-start gap-3 rounded-2xl border border-emerald-500/20 bg-emerald-50/70 p-4 text-emerald-900 leading-relaxed dark:border-emerald-500/30 dark:bg-emerald-500/10 dark:text-emerald-200"><svg viewBox="0 0 16 16" aria-hidden="true" class="mt-1.5 h-5 w-5 flex-none fill-emerald-500 stroke-white dark:fill-emerald-200/20 dark:stroke-emerald-200"><circle cx="8" cy="8" r="8" stroke-width="0"></circle><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M6.75 7.75h1.5v3.5"></path><circle cx="8" cy="4" r=".5" fill="none"></circle></svg><div class="space-y-2"><p class="m-0 font-semibold">Apps using Survicate SDK after February 14th 2025 will require:</p><ul class="list-disc pl-5 space-y-1"><li>Respondent's device running iOS 14 or above. (for Survicate SDKs released after February 14th 2025).</li><li>Using Survicate SDK version equal or greater than 4.0.0 (versions below 4.0.0 are reaching EoL).</li></ul></div></div> <hr/> <h2 id="installation" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#installation">Installation</a></h2> <p>There are three ways to install the Survicate Mobile SDK in the iOS applications:</p> <h3 id="installing-as-swift-package" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#installing-as-swift-package">Installing as Swift Package</a></h3> <p>The recommended installation method.</p> <ol> <li>Once your iOS application project is ready, open it in the Xcode and select your project’s Package Dependencies tab</li> <li>Copy the Survicate SDK Swift package repository URL <code>https://github.com/Survicate/survicate-ios-sdk</code> into the search field</li> <li>Under the Dependency Rule, select the version of your preference. <img src="/add_package_0.png" alt="Add Swift Package step 1"/></li> <li>After the package download completes, select Add Package. <img src="/add_package_1.png" alt="Add Swift Package step 2"/></li> </ol> <p>Survicate SDK should now be listed under Swift Package Dependencies in the Xcode Project Navigator.</p> <h3 id="installing-using-cocoa-pods" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#installing-using-cocoa-pods">Installing using CocoaPods</a></h3> <p>Define pod in your <code>Podfile</code> and run <code>pod install</code>.</p> <!-- --> <h3 id="installing-manually" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#installing-manually">Installing manually</a></h3> <ol> <li><a href="https://repo.survicate.com/latest/ios/Survicate.zip">Download and extract the Survicate for iOS</a></li> <li>Drag Survicate.framework into your project. Make sure "Copy items if needed" is selected and click Finish.</li> <li>In the target settings for your app, set the Survicate.framework to “Embed & Sign”. You'll find it in the “Frameworks, Libraries, and Embedded Content” section of the “General” tab.</li> </ol> <hr/> <h2 id="configuration" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#configuration">Configuration</a></h2> <p>The following configuration will require a Workspace Key. You can get your workspace key in the <a href="https://panel.survicate.com/o/0/w/0/settings/access-keys">Access Keys section</a> of the Survicate panel.</p> <ol> <li>Add workspace key to your <code>Info.plist</code> file.<!-- --> <ul> <li>Create <code>Survicate</code> <em>Dictionary</em>.</li> <li>Define <code>WorkspaceKey</code> <em>String</em> in <code>Survicate</code> <em>Dictionary</em>. This is how your <code>Info.plist</code> file should look like: <img src="/ios-infoplist.png" alt="Info.plist example"/></li> </ul> </li> <li>Initialize the SDK using the <code>initialize</code> method. Choose an initialization method described below based on whether your project utilizes 'AppDelegate' class.</li> </ol> <p>Make sure that <code>import Survicate</code> line exists in all classes where you call SDK methods.</p> <!-- --> <p>Survicate iOS SDK can be used in SwiftUI projects. If your SwiftUI project doesn't use the <code>AppDelegate</code> class, the initialization of the Survicate Mobile SDK can be done in the constructor of the main application class:</p> <!-- --> <p>As an alternative to the main way of specifying the Workspace Key, you can also use the <code>setWorkspaceKey()</code> method.</p> <p>Important:</p> <ul> <li>Using <code>setWorkspaceKey()</code> method overrides the Workspace Key defined in the configuration.</li> <li><code>setWorkspaceKey()</code> method must be used before <code>init()</code> method is called.</li> </ul> <!-- --> <hr/> <h2 id="using-sdk" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#using-sdk">Using SDK</a></h2> <p>Survicate allows you to launch precisely targeted surveys inside your app. In Survicate Panel, you'll be able to define conditions that your users have to meet for the surveys to appear. Users matching conditions defined in the Survicate panel will see the survey automatically. Here's a list of conditions you can use to target your surveys:</p> <ul> <li>Name of the screen that a user currently sees</li> <li>Any application event</li> <li>User attributes and identities</li> <li>Device language</li> <li>Operating system</li> </ul> <p>Make sure to list all the screens and events described in your application. Once you got this covered, you or any person responsible for creating and managing surveys will be able to trigger surveys from the Survicate panel with no need for you to update the application.</p> <p><strong>Warning</strong> The SDK utilizes <a href="https://developer.apple.com/documentation/foundation/userdefaults">UserDefaults</a> to store information used by the targeting engine described in this section. Clearing UserDefaults will cause the targeting system to malfunction; f.e. by showing the same survey twice to a single user.</p> <h3 id="targeting-a-survey-by-the-screen-name" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#targeting-a-survey-by-the-screen-name">Targeting a survey by the screen name</a></h3> <p>A survey can appear when a user is viewing a specific screen. For example, a survey can be triggered to show up on the application's home screen after a user spends more than ten seconds there. To achieve that, you need to send information to Survicate about the user entering and leaving a screen.</p> <!-- --> <p><em>Screen name is case sensitive. If there's any discrepancy between what's declared in the ‘Screens’ tab of the Target section in the Survicate panel and the application code, the survey will not appear.</em></p> <h3 id="events-based-survey-targeting" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#events-based-survey-targeting">Events-based survey targeting</a></h3> <p>You can log custom user events throughout your application. They can later be used in the Survicate panel to trigger your surveys. Your survey will show instantly after an event occurs in your app.</p> <!-- --> <p><em>Event name and property keys are case sensitive. If there is any discrepancy between what's declared in the ‘Triggers’ tab of the Target section in the Survicate panel and the application code, the survey will not appear.</em></p> <h3 id="user-identification-and-attributes" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#user-identification-and-attributes">User identification & attributes</a></h3> <p>You can pass user attributes to Survicate as an additional layer of information about your users. Attributes can be used to:</p> <ul> <li>Identify respondents (by default survey responses are anonymous).</li> <li>Target surveys to specific users with Audience filters.</li> <li>Filter survey results.</li> <li>Recall information in survey questions (e.g. include user name).</li> </ul> <!-- --> <p><em>Bear in mind that user attributes are cached, you only have to provide them once, e.g. when user logs in, not after each <code>initialize()</code>. You can also change their values at any time (which may potentially trigger showing the survey).</em></p> <p><strong>Attribute types</strong></p> <ul> <li><strong>String</strong>: any text, e.g. user name or e-mail.</li> <li><strong>Double</strong>: a decimal value.</li> <li><strong>Boolean</strong>: a logic value.</li> <li><strong>Date</strong>: a <code>Date</code> that can be used in date or time interval filters.</li> </ul> <p><strong>Special attributes</strong></p> <ul> <li> <p><strong>user_id</strong>: This corresponds to the "Logged-in status" in the panel's Audience filter. A user is considered logged-in when a trait with the "user_id" key has been set on the device, regardless of the value.</p> </li> <li> <p><strong>first_name</strong>, <strong>last_name</strong>, <strong>email</strong>: If none of these is specified, a response will be marked as Anonymous in the panel.</p> </li> </ul> <p><strong>Additional notes</strong></p> <ul> <li> <p>You can freely use custom attribute keys without the need to register them anywhere.</p> </li> <li> <p>In some panel functionalities (e.g. autocompletion), the attribute key will be available only after a survey response with the given attribute is uploaded (unless the key was added in the panel manually). By that time, the trait is saved only locally on the user's device.</p> </li> <li> <p>Note that the predefined attribute classes (<code>UserTrait.userId</code>, <code>UserTrait.firstName</code>, etc.) have been deprecated in version 4.0. Instead, you should use the <code>UserTrait(withName, value)</code> constructor. You will find migration details in the deprecation messages.</p> </li> <li> <p>In objective-c implementation you should use string values for every attribute type (e.g. <code>@"true"</code> for boolean attribute).</p> </li> </ul> <h3 id="reseting-user-data-for-testing-purposes" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#reseting-user-data-for-testing-purposes">Reseting user data for testing purposes</a></h3> <p>If you need to test surveys on your device, <code>reset()</code> method might be helpful. This method will reset all user data stored on your device (survey views, attributes, and information about answered surveys for the targeting engine).</p> <!-- --> <h3 id="listeners" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#listeners">Listeners</a></h3> <p>SDK allows you to utilize event listeners. You may find them useful to trigger actions in your application based on actions performed by respondents. Here's a list of events you can subscribe to:</p> <ul> <li>survey_displayed - occurs when survey is loaded and appears in the User Interface</li> <li>question_answered - occurs after a question is answered ( Survicate stores incomplete survey submissions )</li> <li>survey_closed - occurs when a user closes the survey using the close button</li> <li>survey_completed - occurs when a user finishes the survey.</li> </ul> <!-- --> <h4><em>SurvicateAnswer</em> object properties (<em>QuestionAnsweredEvent.answer</em>)</h4> <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">type</td><td align="left">String</td><td align="left">Answer type. One of: ['text', 'single', 'multiple', 'smiley_scale', 'rating', 'csat', 'numerical_scale', 'nps', 'date', 'form', 'matrix', 'button_close', 'button_next', 'button_link'].</td></tr><tr><td align="left">id</td><td align="left">Integer</td><td align="left">Answer ID. <strong>Applicable only for types: ['single', 'smiley_scale', 'csat', 'rating', 'numerical_scale'].</strong></td></tr><tr><td align="left">ids</td><td align="left">Integer[]</td><td align="left">Selected answer IDs. <strong>Applicable only for type = ['multiple'].</strong></td></tr><tr><td align="left">value</td><td align="left">String?</td><td align="left">Text representation of an answer, e.g. "Happy" for smiley scale. A <code>nil</code> value in case of a skipped question. <strong>Not applicable for call-to-action answers: ['button_close', 'button_next', 'button_link'].</strong></td></tr></tbody></table> <p><em>Note: We currently support passing the <code>id</code>, <code>ids</code> and <code>value</code> properties only for the cases enlisted in the table above. You can expect to stumble upon answer objects that consist only of the <code>type</code> property.</em></p> <hr/> <h2 id="changelog" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#changelog">Changelog</a></h2> <h3 id="5-5-2-2024-12-20" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-5-2-2024-12-20">5.5.2 (2024-12-20)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Resolved a crash caused by non-thread-safe access to <code>localizedDescription</code> during error logging.</dd></dl> <h3 id="5-5-1-2024-12-9" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-5-1-2024-12-9">5.5.1 (2024-12-9)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Resolved an issue where comments were missing in event listeners, ensuring proper event tracking.</dd><dd>Fixed a bug where the submit button was disabled in Smiley Scale questions in some cases.</dd><dd>Addressed an issue with the missing submit button in Multiple answer question type.</dd><dd>Fixed an issue with missing comment field in CSAT question when answer is mandatory.</dd></dl> <h3 id="5-5-0-2024-12-4" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-5-0-2024-12-4">5.5.0 (2024-12-4)</a></h3> <dl><dt><b>New</b></dt><dd>You can now add a comment field to NPS, Smiley scale, Rating scale, Matrix, and Date question types. There is also a comment title available for all comment fields. You can use it to ask a question and give your respondents some context of what you would like to see in the comment.</dd></dl> <h3 id="5-4-0-2024-10-22" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-4-0-2024-10-22">5.4.0 (2024-10-22)</a></h3> <dl><dt><b>New</b></dt><dd>Each question type except Welcome message, Date, and Thank you screen can be set as mandatory or optional.</dd><dt><b>Improved</b></dt><dd>Accessibility features for Matrix question, survey progress indicator, and navigation buttons.</dd></dl> <h3 id="5-3-0-2024-09-12" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-3-0-2024-09-12">5.3.0 (2024-09-12)</a></h3> <dl><dt><b>New</b></dt><dd>Once an event is invoked in the app, its name and property names are also sent to Survicate’s panel now. They will be shown as suggestions when a user configures event targeting of a survey.</dd></dl> <h3 id="5-2-0-2024-09-04" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-2-0-2024-09-04">5.2.0 (2024-09-04)</a></h3> <dl><dt><b>New</b></dt><dd>New conditions are available in event targeting:</dd><dd>Time delay after event occurrence</dd><dd>Number of event occurrences</dd><dd>Time of the first occurrence</dd><dd>Time of the last occurrence</dd><dd>If multiple conditions are applied, all of them should be met for a survey to appear.</dd><dt><b>Fixed</b></dt><dd>Fixed an issue with submit button visibility in single choice question.</dd></dl> <h3 id="5-1-2-2024-07-25" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-1-2-2024-07-25">5.1.2 (2024-07-25)</a></h3> <dl><dt><b>Improved</b></dt><dd>More distinguishable emojis in the 3-choice Smiley scale.</dd><dt><b>Fixed</b></dt><dd>Excessive spacing between Smiley scale emojis in the 3-choice layout.</dd><dd>Issue with non visible Submit button in multiple choice questions.</dd></dl> <h3 id="5-1-1-2024-07-18" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-1-1-2024-07-18">5.1.1 (2024-07-18)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Issue with non-validating fields in form questions.</dd></dl> <h3 id="5-1-0-2024-07-17" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-1-0-2024-07-17">5.1.0 (2024-07-17)</a></h3> <dl><dt><b>New</b></dt><dd>Navigation buttons are available now. When enabled, your survey respondents can go back to the previous questions, see their selected answers, and change them if necessary.</dd><dt><b>Fixed</b></dt><dd>Propagating Matrix answer in <code>SurvicateAnswer.value</code> of event listener.<br/> Configuration json will be printed in console only in verbose log level.</dd></dl> <h3 id="5-0-0-2024-06-10" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#5-0-0-2024-06-10">5.0.0 (2024-06-10)</a></h3> <dl><dt><b>New</b></dt><dd>Matrix question type added.</dd><dt><b>Fixed</b></dt><dd>An issue where <code>setUserTrait</code> cleared previously set user traits.</dd></dl> <h3 id="4-4-0-2024-04-30" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-4-0-2024-04-30">4.4.0 (2024-04-30)</a></h3> <dl><dt><b>New</b></dt><dd>New targeting option available - event properties. You can add multiple properties to one event and join them with either “or” or “and” operator.</dd></dl> <h3 id="4-3-1-2024-03-26" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-3-1-2024-03-26">4.3.1 (2024-03-26)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Issue with non triggering questionAnswered delegate method.</dd></dl> <h3 id="4-3-0-2024-03-26" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-3-0-2024-03-26">4.3.0 (2024-03-26)</a></h3> <dl><dt><b>New</b></dt><dd>More flexible survey recurring options are available now. Now you can specify how many days / weeks / months / years should pass before the survey can appear again. It’s also possible to set after how many days / weeks / months / years the survey should stop recurring.</dd><dd>If you run several mobile surveys, now you can use survey throttling settings to specify a time frame that should pass between showing them. Use global throttling to set the same time frame for all your mobile surveys. Or use the survey level throttling to override the global settings and specify a different period before showing a particular survey.</dd></dl> <h3 id="4-2-1-2024-03-25" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-2-1-2024-03-25">4.2.1 (2024-03-25)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Issue with recursive display of non-recurring survey.</dd></dl> <h3 id="4-2-0-2024-03-15" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-2-0-2024-03-15">4.2.0 (2024-03-15)</a></h3> <dl><dt><b>New</b></dt><dd>New targeting filter is available - screen orientation (portrait mode or landscape mode targeting). You can either include or exclude one of the orientation modes.</dd><dd>SDK now supports ISO 8601 date format with milliseconds.</dd></dl> <h3 id="4-1-1-2024-02-15" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-1-1-2024-02-15">4.1.1 (2024-02-15)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Properties of the models in the listener are available within Objective-C.</dd></dl> <h3 id="4-1-0-2024-02-08" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-1-0-2024-02-08">4.1.0 (2024-02-08)</a></h3> <dl><dt><b>New</b></dt><dd>Events like <code>onSurveyDisplayed</code>, <code>onQuestionAnswered</code>, <code>onSurveyClosed</code>, and <code>onSurveyCompleted</code> now utilize specific event objects: <code>SurveyDisplayedEvent</code>, <code>QuestionAnsweredEvent</code>, <code>SurveyClosedEvent</code>, <code>SurveyCompletedEvent</code>.<br/> The SDK now supports the registration of multiple event listeners.</dd></dl> <h3 id="4-0-2-2024-01-22" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-0-2-2024-01-22">4.0.2 (2024-01-22)</a></h3> <dl><dt><b>Fixed</b></dt><dd>An issue where Thank you screen don't close survey in classic theme</dd></dl> <h3 id="4-0-1-2024-01-09" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-0-1-2024-01-09">4.0.1 (2024-01-09)</a></h3> <dl><dt><b>Improved</b></dt><dd>Date format in user traits recalling</dd><dt><b>Fixed</b></dt><dd>A bug where users could see survey more times than specified in recurrence settings if SDK was updated in meantime</dd></dl> <h3 id="4-0-0-2023-11-30" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#4-0-0-2023-11-30">4.0.0 (2023-11-30)</a></h3> <dl><dt><b>New</b></dt><dd>User conditions targeting is changed to the audience targeting: create an audience that will be available for usage among all your mobile surveys.</dd><dd>Enable multiple audiences at the same time in one survey if necessary.</dd><dd>User attributes now support not only string values but also numbers, boolean, and datetime values.</dd><dd>New attribute operators are available to support new data types.</dd><dd>Survey audience can be set not only by including a set of respondents who met the required criteria but also by excluding those who should not see the survey.</dd><dd>And / or operators in audience targeting are switchable now: within one attribute filter that has several attributes in it and between different filters.</dd></dl> <h3 id="3-0-4-2023-09-28" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#3-0-4-2023-09-28">3.0.4 (2023-09-28)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Issue where surveys were not translated when app language was set to dialect.</dd></dl> <h3 id="3-0-3-2023-09-27" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#3-0-3-2023-09-27">3.0.3 (2023-09-27)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Issue where rating scale question answer ID was missing in listener.</dd></dl> <h3 id="3-0-2-2023-08-21" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#3-0-2-2023-08-21">3.0.2 (2023-08-21)</a></h3> <dl><dt><b>Improved</b></dt><dd>Not displaying surveys when alerts are visible.</dd></dl> <h3 id="3-0-1-2023-07-31" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#3-0-1-2023-07-31">3.0.1 (2023-07-31)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Issue with displaying a survey in workspaces with multiple recurring surveys despite meeting all the conditions.</dd></dl> <h3 id="3-0-0-2023-07-25" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#3-0-0-2023-07-25">3.0.0 (2023-07-25)</a></h3> <dl><dt><b>New</b></dt><dd>New logic settings have been added to all question types (except Welcome message, Date and Thank you screen).</dd><dt><b>Fixed</b></dt><dd>Issue with keyboard animations.</dd></dl> <h3 id="2-4-0-2023-07-11" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-4-0-2023-07-11">2.4.0 (2023-07-11)</a></h3> <dl><dt><b>New</b></dt><dd>Now it's possible to select how to position answer choices in the NPS question: vertically (default option) or horizontally.</dd><dt><b>Fixed</b></dt><dd>An issue with the first question being displayed incorrectly.</dd></dl> <h3 id="2-3-1-2023-06-06" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-3-1-2023-06-06">2.3.1 (2023-06-06)</a></h3> <dl><dt><b>Fixed</b></dt><dd>An issue when it was not possible to filter survey responses by language in the panel.<br/> An issue where after synchronization failure the SDK was not respecting refresh interval.<br/> An issue where submit button on iPad was not displayed correctly.</dd></dl> <h3 id="2-3-0-2023-05-25" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-3-0-2023-05-25">2.3.0 (2023-05-25)</a></h3> <dl><dt><b>New</b></dt><dd>Now while adding introduction or question texts you can recall information from attributes passed to Survicate or from answers to other questions in the survey.</dd></dl> <h3 id="2-2-1-2023-05-9" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-2-1-2023-05-9">2.2.1 (2023-05-9)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Assigning answers to the wrong survey within the same workspace.</dd></dl> <h3 id="2-2-0-2023-05-4" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-2-0-2023-05-4">2.2.0 (2023-05-4)</a></h3> <dl><dt><b>New</b></dt><dd>Surveys can be translated into an app language if a corresponding translation is added in the panel.</dd></dl> <h3 id="2-1-2-2023-04-24" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-1-2-2023-04-24">2.1.2 (2023-04-24)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Bug that caused a crash when calling SDK on multiple threads.</dd></dl> <h3 id="2-1-1-2023-04-12" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-1-1-2023-04-12">2.1.1 (2023-04-12)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Visible hyphen even in the absence of a label in NPS and rating scale.</dd></dl> <h3 id="2-1-0-2023-04-06" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-1-0-2023-04-06">2.1.0 (2023-04-06)</a></h3> <dl><dt><b>New</b></dt><dd>Rating question type added.<br/> Question and introduction texts can be made bold, italics, or hyperlinked.</dd></dl> <h3 id="2-0-2-2023-03-20" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-0-2-2023-03-20">2.0.2 (2023-03-20)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Special characters encoding issue.</dd></dl> <h3 id="2-0-1-2023-03-14" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-0-1-2023-03-14">2.0.1 (2023-03-14)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Disabled dismiss on overlay tap.</dd></dl> <h3 id="2-0-0-2023-03-09" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#2-0-0-2023-03-09">2.0.0 (2023-03-09)</a></h3> <dl><dt><b>New</b></dt><dd>21 new design themes. <br/> 2 new survey settings - “Progress bar” and “Remove Survicate branding”.<br/> New customization options: add a company's logo or a survey sender's avatar and a greeting message from them.</dd></dl> <h3 id="1-8-10-2023-02-9" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-10-2023-02-9">1.8.10 (2023-02-9)</a></h3> <dl><dt><b>Improved</b></dt><dd>Accuracy of survey sampling.</dd><dt><b>Fixed</b></dt><dd>Code causing priority inversion warning to be displayed.</dd></dl> <h3 id="1-8-9-2023-01-24" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-9-2023-01-24">1.8.9 (2023-01-24)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Language detection issues.</dd></dl> <h3 id="1-8-8-2023-01-1" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-8-2023-01-1">1.8.8 (2023-01-1)</a></h3> <dl><dt><b>Update</b></dt><dd>Remove character limit from text fields.</dd></dl> <h3 id="1-8-7-2022-12-6" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-7-2022-12-6">1.8.7 (2022-12-6)</a></h3> <dl><dt><b>Fixed</b></dt><dd>An issue of not showing the survey on dismissing the view controller.</dd></dl> <h3 id="1-8-6-2022-12-5" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-6-2022-12-5">1.8.6 (2022-12-5)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Problem with truncating endings in long answer texts.</dd></dl> <h3 id="1-8-5-2022-11-22" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-5-2022-11-22">1.8.5 (2022-11-22)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>An issues causing a survey to be displayed repeatedly, when using a delayed display feature.</p></dd></dl> <h3 id="1-8-4-2022-11-16" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-4-2022-11-16">1.8.4 (2022-11-16)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>A possible race condition when multiple SDK methods are called at the same time.</p></dd></dl> <h3 id="1-8-3-2022-09-03" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-3-2022-09-03">1.8.3 (2022-09-03)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>An issue causing NPS button labels to be displayed in incorrect colors.</p></dd><dt><b>Changed</b></dt><dd><p>The minimum iOS version requirement for the respondent's device is now iOS 12.</p></dd></dl> <h3 id="1-8-2-2022-08-05" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-2-2022-08-05">1.8.2 (2022-08-05)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Layout fixes for large displays.</dd><dt><b>Fixed</b></dt><dd>Answers for smiley scale questions could be not stored.</dd></dl> <h3 id="1-8-1-2022-06-14" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-1-2022-06-14">1.8.1 (2022-06-14)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Tracking the SDK version for internal purposes.</dd></dl> <h3 id="1-8-0-2022-05-19" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-8-0-2022-05-19">1.8.0 (2022-05-19)</a></h3> <dl><dt><b>New</b></dt><dd><p>Detailed answer value for the Smile scale question is provided in the Question answered event listener.</p></dd></dl> <h3 id="1-7-3-2022-05-10" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-7-3-2022-05-10">1.7.3 (2022-05-10)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Survey layout issues.</dd></dl> <h3 id="1-7-1-2022-04-05" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-7-1-2022-04-05">1.7.1 (2022-04-05)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Memory leaks.</dd></dl> <h3 id="1-7-0-2022-03-22" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-7-0-2022-03-22">1.7.0 (2022-03-22)</a></h3> <dl><dt><b>New</b></dt><dd><p>Survicate Mobile SDK can now be integrated using Swift Package Manager.<!-- --> </p><br/><p>Please refer to the <a href="/mobile-sdk/installation/"> installation </a> documentation to see, how to integrate Survicate Mobile SDK using Swift Package Manager.</p></dd></dl> <h3 id="1-6-7-2022-03-15" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-7-2022-03-15">1.6.7 (2022-03-15)</a></h3> <dl><dt><b>Updated</b></dt><dd><p>Improved UI rendering speed, we fixed minor layout glitches and some memory leaks.</p></dd></dl> <h3 id="1-6-6-2022-03-08" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-6-2022-03-08">1.6.6 (2022-03-08)</a></h3> <dl><dt><b>Fixed</b></dt><dd>UI rendering speed and layout glitches.</dd></dl> <h3 id="1-6-5-2022-02-23" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-5-2022-02-23">1.6.5 (2022-02-23)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Memory leaks and UI rendering speed.</dd></dl> <h3 id="1-6-4-2022-02-16" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-4-2022-02-16">1.6.4 (2022-02-16)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>When setting the survey to appear to less than 1% of targeted users, the survey was not displayed. In general, the audience sampling feature in the targeting engine had issues with interpreting numbers with decimal points.</p></dd></dl> <h3 id="1-6-3-2022-02-04" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-3-2022-02-04">1.6.3 (2022-02-04)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>In some cases survey settings (TTL) mechanism was not refreshed correctly.</p></dd><dt><b>Updated</b></dt><dd>Survey settings Time to Live(TTL) reduced to 10 minutes.</dd></dl> <h3 id="1-6-2-2022-01-26" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-2-2022-01-26">1.6.2 (2022-01-26)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>The <code>setWorkspaceKey()</code> method is now working properly, as described in the documentation.</p></dd></dl> <h3 id="1-6-1-2021-12-08" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-1-2021-12-08">1.6.1 (2021-12-08)</a></h3> <dl><dt><b>Updated/Fixed</b></dt><dd><p>The minimum Xcode version required to run Survicate Mobile SDK is now: 12.5.1</p></dd></dl> <h3 id="1-6-0-2021-11-18" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-6-0-2021-11-18">1.6.0 (2021-11-18)</a></h3> <dl><dt><b>New</b></dt><dd><p>Surveys can now be set to appear on a recurring basis. This means respondents can answer the same mobile survey again, and again - on a daily, weekly, monthly, or quarterly basis.</p></dd></dl> <h3 id="1-5-8-2021-10-26" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-8-2021-10-26">1.5.8 (2021-10-26)</a></h3> <dl><dt><b>New</b></dt><dd>Scale labels can now be displayed below the smiley scale question</dd></dl> <h3 id="1-5-7-2021-10-21" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-7-2021-10-21">1.5.7 (2021-10-21)</a></h3> <dl><dt><b>New</b></dt><dd><p>Survey settings Time to Live(TTL) mechanism on respondent's device. The mechanism ensures that the survey settings are up to date on the respondent's side. If the current version of survey settings is older than 60 minutes, the survey configuration is checked for updates.<!-- --> </p></dd></dl> <h3 id="1-5-6-2021-09-29" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-6-2021-09-29">1.5.6 (2021-09-29)</a></h3> <dl><dt><b>New</b></dt><dd><p>The method <code>setWorkspaceKey()</code> allows to specify Survicate workspace key from code.</p></dd></dl> <h3 id="1-5-5-2021-08-26" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-5-2021-08-26">1.5.5 (2021-08-26)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>Locales used by SDK were improved to resolve issue related to warning WARNING ITMS-90176 appearing during upload the app using SDK to the AppStore</p></dd></dl> <h3 id="1-5-4-2021-08-26" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-4-2021-08-26">1.5.4 (2021-08-26)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>We restored the minimum iOS version required for the SDK to work to 10.0.</p></dd></dl> <h3 id="1-5-3-2021-08-23" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-3-2021-08-23">1.5.3 (2021-08-23)</a></h3> <dl><dt><b>Updated</b></dt><dd><p>Survicate iOS SDK is now distributed as an XCFramework binary, making the SDK compatible with Swift 5.x. As a result, the main class of Survicate Mobile SDK had to be renamed.</p><br/><p>The version <b>1.5.3</b> of the Survicate iOS SDK introduces support for binary framework, which causes a minor <b>backward compatibility break</b>. Until the version 1.5.3 the main SDK class was called <code>Survicate</code> , in the version 1.5.3 that class was renamed to <code>SurvicateSdk</code>. The change was introduced to make it possible to distribute Survicate Mobile SDK as the XCFramework binary.</p></dd></dl> <h3 id="1-5-2-2021-07-23" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-2-2021-07-23">1.5.2 (2021-07-23)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Support for using the Survicate Mobile SDK with Swift 5.x</dd></dl> <h3 id="1-5-1-2021-06-24" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-1-2021-06-24">1.5.1 (2021-06-24)</a></h3> <dl><dt><b>Updated</b></dt><dd>Provides support for using the Survicate Mobile SDK with Swift 5.4.1</dd></dl> <h3 id="1-5-0-2021-06-15" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-5-0-2021-06-15">1.5.0 (2021-06-15)</a></h3> <dl><dt><b>New</b></dt><dd><p>Multiple choice question are shown as checkboxes instead of radio buttons</p></dd><dd>SDK uses currently respondent API v3 endpoints</dd><dt><b>Fixed</b></dt><dd><p>The <code>cornerRadius</code> extension was renamed in order to avoid conflict in apps that would use SDK</p></dd></dl> <h3 id="1-4-5-2021-04-28" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-4-5-2021-04-28">1.4.5 (2021-04-28)</a></h3> <dl><dt><b>Updated</b></dt><dd>Supported Swift version 5.4.</dd></dl> <h3 id="1-4-4-2021-04-19" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-4-4-2021-04-19">1.4.4 (2021-04-19)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p>An issue that caused targeting by attributes to malfunction in some cases.</p></dd></dl> <h3 id="1-4-3-2020-12-02" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-4-3-2020-12-02">1.4.3 (2020-12-02)</a></h3> <dl><dt><b>Updated</b></dt><dd>Supported Swift version 5.3.1.</dd></dl> <h3 id="1-4-2-2020-09-23" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-4-2-2020-09-23">1.4.2 (2020-09-23)</a></h3> <dl><dt><b>Updated</b></dt><dd>Supported Swift version 5.3.</dd></dl> <h3 id="1-4-1-2020-09-22" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-4-1-2020-09-22">1.4.1 (2020-09-22)</a></h3> <dl><dt><b>New</b></dt><dd><p>It’s now possible to suppress a survey if other was answered during the current visit to your app.</p></dd></dl> <h3 id="1-4-0-2020-04-22" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-4-0-2020-04-22">1.4.0 (2020-04-22)</a></h3> <dl><dt><b>Updated</b></dt><dd><p>Unnecessary spacing on the left side of the question has been removed.</p></dd><dt><b>Fixed</b></dt><dd>Proper handling of 4xx error codes.</dd><dt><b>Fixed</b></dt><dd><p>A bug causing surveys not to appear when targeted only at logged in users.</p></dd><dt><b>Fixed</b></dt><dd><p>A minor issue causing the survey not to appear when targeted at multiple values of the same attribute.</p></dd></dl> <h3 id="1-3-2-2020-04-01" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-3-2-2020-04-01">1.3.2 (2020-04-01)</a></h3> <dl><dt><b>Updated</b></dt><dd>Supported Swift version 5.2.</dd></dl> <h3 id="1-3-1-2020-02-11" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-3-1-2020-02-11">1.3.1 (2020-02-11)</a></h3> <dl><dt><b>Fixed</b></dt><dd>SDK listeners - answer object minor fixes.</dd></dl> <h3 id="1-3-0-2020-01-23" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-3-0-2020-01-23">1.3.0 (2020-01-23)</a></h3> <dl><dt><b>New</b></dt><dd>SDK now supports listeners.</dd></dl> <h3 id="1-2-0-2019-12-19" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-2-0-2019-12-19">1.2.0 (2019-12-19)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Survey ends after Thank you message and CTA.</dd><dt><b>New</b></dt><dd>SDK now supports survey completion rate.</dd></dl> <h3 id="1-1-5-2019-10-11" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-1-5-2019-10-11">1.1.5 (2019-10-11)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Surveys layout leaned on right column.</dd></dl> <h3 id="1-1-4-2019-09-25" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-1-4-2019-09-25">1.1.4 (2019-09-25)</a></h3> <dl><dt><b>Updated</b></dt><dd>Supported Swift version 5.1.</dd></dl> <h3 id="1-1-3-2019-09-10" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-1-3-2019-09-10">1.1.3 (2019-09-10)</a></h3> <dl><dt><b>Updated</b></dt><dd>SDK now supports new installation flow.</dd></dl> <h3 id="1-1-2-2019-08-08" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-1-2-2019-08-08">1.1.2 (2019-08-08)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Skip-logic wasn't functioning properly in some cases.</dd><dt><b>Fixed</b></dt><dd><p><code>reset()</code> method didn't clear user attributes.</p></dd></dl> <h3 id="1-1-0-2019-04-05" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-1-0-2019-04-05">1.1.0 (2019-04-05)</a></h3> <dl><dt><b>Updated</b></dt><dd>Supported Swift version 5.0.</dd></dl> <h3 id="1-0-8-2019-03-19" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-0-8-2019-03-19">1.0.8 (2019-03-19)</a></h3> <dl><dt><b>Fixed</b></dt><dd>Surveys were sometimes shown on a wrong 'ViewController'.</dd></dl> <h3 id="1-0-7-2019-01-30" class="scroll-mt-24"><a class="group text-inherit no-underline hover:text-inherit" href="/mobile-sdk/ios/#1-0-7-2019-01-30">1.0.7 (2019-01-30)</a></h3> <dl><dt><b>Fixed</b></dt><dd><p><code>UserTrait</code> default constructor was missing.</p></dd></dl></article></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"sections":[{"title":"Installation","id":"installation"},{"title":"Configuration","id":"configuration"},{"title":"Using SDK","id":"using-sdk"},{"title":"Changelog","id":"changelog"}],"title":"Survicate iOS SDK"},"__N_SSG":true},"page":"/mobile-sdk/ios","query":{},"buildId":"oRxhVlM_MccxFN_yHU--1","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body></html>