CINXE.COM
Security | Apple Developer Forums
<!DOCTYPE html> <html lang="en-US" dir="ltr"> <head> <title>Security | Apple Developer Forums</title> <meta name="description" content="Connect with fellow developers and Apple experts as you give and receive help on Security"> <link rel="next" href="https://forums.developer.apple.com/forums/tags/security?page=2"/> <link rel="canonical" href="https://forums.developer.apple.com/forums/tags/security"/> <link href="https://developer.apple.com/forums/public/compiled/pages/tag.css" rel="stylesheet"> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1, viewport-fit=cover"> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="encryption" data-status="enabled" data-x-token="disabled"> <link rel="shortcut icon" href="https://developer.apple.com/forums/public/assets/favicon.ico" type="image/x-icon"> <link rel="stylesheet" type="text/css" href="//developer.apple.com/assets/styles/globalnav.css"> <link rel="stylesheet" type="text/css" href="//developer.apple.com/assets/styles/search.css"> <link href="https://developer.apple.com/forums/public/compiled/decorator.css" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="//developer.apple.com/assets/styles/footer.dist.css" /> <link rel="stylesheet" type="text/css" href="//www.apple.com/wss/fonts/?family=Apple+Icons&v=1"> <link rel="stylesheet" type="text/css" href="//www.apple.com/wss/fonts?families=SF+Pro,v2%7CSF+Pro+Icons,v1%7CSF+Mono,v1"> <style type="text/css"> /** NONE */ </style> <script type="text/javascript"> /** NONE **/ </script> </head> <body > <aside id="ac-gn-segmentbar" class="ac-gn-segmentbar" lang="en-US" dir="ltr"> </aside> <input type="checkbox" id="ac-gn-menustate" class="ac-gn-menustate" /> <nav id="ac-globalnav" class="no-js" role="navigation" aria-label="Global" data-hires="false" data-analytics-region="global nav" lang="en-US" dir="ltr" data-www-domain="www.apple.com" data-store-locale="us" data-store-root-path="/us" data-store-api="/[storefront]/shop/bag/status" data-search-locale="en_US"> <div class="ac-gn-content"> <ul class="ac-gn-header"> <li class="ac-gn-item ac-gn-menuicon"> <label class="ac-gn-menuicon-label" for="ac-gn-menustate" aria-hidden="true"> <span class="ac-gn-menuicon-bread ac-gn-menuicon-bread-top"> <span class="ac-gn-menuicon-bread-crust ac-gn-menuicon-bread-crust-top"></span> </span> <span class="ac-gn-menuicon-bread ac-gn-menuicon-bread-bottom"> <span class="ac-gn-menuicon-bread-crust ac-gn-menuicon-bread-crust-bottom"></span> </span> </label> <a href="#ac-gn-menustate" role="button" class="ac-gn-menuanchor ac-gn-menuanchor-open" id="ac-gn-menuanchor-open"> <span class="ac-gn-menuanchor-label">Global Nav Open Menu</span> </a> <a href="#" role="button" class="ac-gn-menuanchor ac-gn-menuanchor-close" id="ac-gn-menuanchor-close"> <span class="ac-gn-menuanchor-label">Global Nav Close Menu</span> </a> </li> <li class="ac-gn-item ac-gn-apple"> <a class="ac-gn-link ac-gn-link-apple-developer" href="https://developer.apple.com/" data-analytics-title="appledeveloper home" id="ac-gn-firstfocus-small"> <span class="ac-gn-link-text">Apple Developer</span> </a> </li> </ul> <div class="ac-gn-search-placeholder-container" role="search"> <div class="ac-gn-search ac-gn-search-small"> <a id="ac-gn-link-search-small" class="ac-gn-link" href="https://developer.apple.com/search/" data-analytics-title="search" data-analytics-click="search" data-analytics-intrapage-link aria-label="Search"> <div class="ac-gn-search-placeholder-bar"> <div class="ac-gn-search-placeholder-input"> <div class="ac-gn-search-placeholder-input-text" aria-hidden="true"> <div class="ac-gn-link-search ac-gn-search-placeholder-input-icon"></div> <span class="ac-gn-search-placeholder">Search</span> </div> </div> <div class="ac-gn-searchview-close ac-gn-searchview-close-small ac-gn-search-placeholder-searchview-close"> <span class="ac-gn-searchview-close-cancel" aria-hidden="true">Cancel</span> </div> </div> </a> </div> </div> <ul class="ac-gn-list"> <li class="ac-gn-item ac-gn-apple"> <a class="ac-gn-link ac-gn-link-apple-developer" href="https://developer.apple.com/" data-analytics-title="appledeveloper home" id="ac-gn-firstfocus"> <span class="ac-gn-link-text">Apple Developer</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-news"> <a class="ac-gn-link ac-gn-link-news" href="https://developer.apple.com/news/" data-analytics-title="news"> <span class="ac-gn-link-text">News</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-discover"> <a class="ac-gn-link ac-gn-link-discover" href="https://developer.apple.com/discover/" data-analytics-title="discover"> <span class="ac-gn-link-text">Discover</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-design"> <a class="ac-gn-link ac-gn-link-design" href="https://developer.apple.com/design/" data-analytics-title="design"> <span class="ac-gn-link-text">Design</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-develop"> <a class="ac-gn-link ac-gn-link-develop" href="https://developer.apple.com/develop/" data-analytics-title="develop"> <span class="ac-gn-link-text">Develop</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-distribute"> <a class="ac-gn-link ac-gn-link-distribute" href="https://developer.apple.com/distribute/" data-analytics-title="distribute"> <span class="ac-gn-link-text">Distribute</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-dsupport"> <a class="ac-gn-link ac-gn-link-dsupport" href="https://developer.apple.com/support/" data-analytics-title="dsupport"> <span class="ac-gn-link-text">Support</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-account"> <a class="ac-gn-link ac-gn-link-account" href="https://developer.apple.com/account/" data-analytics-title="account"> <span class="ac-gn-link-text">Account</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-search" role="search"> <a id="ac-gn-link-search" class="ac-gn-link ac-gn-link-search" href="https://developer.apple.com/search/" data-analytics-title="search" data-analytics-click="search" data-analytics-intrapage-link aria-label="Search"></a> </li> </ul> <aside id="ac-gn-searchview" class="ac-gn-searchview" role="search" data-analytics-region="search"> <div class="ac-gn-searchview-content"> <div class="ac-gn-searchview-bar"> <div class="ac-gn-searchview-bar-wrapper"> <form id="ac-gn-searchform" class="ac-gn-searchform" action="/search/" method="get"> <div class="ac-gn-searchform-wrapper"> <input id="ac-gn-searchform-input" class="ac-gn-searchform-input" type="text" name="q" aria-label="Search" placeholder="Search" autocorrect="off" autocapitalize="off" autocomplete="off" spellcheck="false" role="combobox" aria-autocomplete="list" aria-expanded="true" aria-owns="quicklinks suggestions" /> <button id="ac-gn-searchform-submit" class="ac-gn-searchform-submit" type="submit" disabled aria-label="Submit Search"></button> <button id="ac-gn-searchform-reset" class="ac-gn-searchform-reset" type="reset" disabled aria-label="Clear Search"> <span class="ac-gn-searchform-reset-background"></span> </button> </div> </form> <button id="ac-gn-searchview-close-small" class="ac-gn-searchview-close ac-gn-searchview-close-small" aria-label="Cancel Search"> <span class="ac-gn-searchview-close-cancel" aria-hidden="true"> Cancel </span> </button> </div> </div> <aside id="ac-gn-searchresults" class="ac-gn-searchresults hidden" data-string-quicklinks="Quick Links" data-string-suggestions="Suggested Searches" data-string-noresults=""> <section class="ac-gn-searchresults-section ac-gn-searchresults-section-defaultlinks"> <div class="ac-gn-searchresults-section-wrapper"> <div class="search-group-checkbox hidden"><input id="group-input" type="checkbox" name="group-filter" checked>Only search within “<span id="group-search-label"></span>”</div> <h3 class="ac-gn-searchresults-header ac-gn-searchresults-animated">Quick Links</h3> <ul class="ac-gn-searchresults-list" id="defaultlinks" role="listbox"> </ul> <span role="status" class="ac-gn-searchresults-count" aria-live="polite">5 Quick Links</span> </div> </section> </aside> </div> <button id="ac-gn-searchview-close" class="ac-gn-searchview-close" aria-label="Cancel Search"> <span class="ac-gn-searchview-close-wrapper"> <span class="ac-gn-searchview-close-left"></span> <span class="ac-gn-searchview-close-right"></span> </span> </button> </aside> </div> </nav> <div id="ac-gn-curtain" class="ac-gn-curtain"></div> <nav class="sub-nav" aria-label="Developer Forums"> <a href="/forums/" class="title"> <span class="hide-mobile-inline">Developer</span> Forums </a> <div class="search-container"> <div class="search-component"> <form action="/forums/search" class="search-form" method="GET" data-action="search-form" role="search" aria-label="Developer Forums" novalidate="novalidate"> <label for="search-forums-1" class="a11y">Search by keywords or tags</label> <div class="input-container"> <div class="editable-container" role="combobox" aria-expanded="false" aria-controls="listboxId-1" aria-haspopup="listbox" aria-label="Choose a topic"> <button class="submit-button" type="submit" data-action="submit-button"> <span class="a11y">Submit Search</span> </button> <div contenteditable="true" id="search-forums-1" class="search-form-input " data-cy="search" role="textbox" aria-multiline="false" aria-required="true" aria-invalid="false" data-action="search-input" placeholder="Search by keywords or tags" spellcheck="false" tabindex="0" aria-multiline="false" maxlength="250" aria-autocomplete="list" aria-label="Search forums" ></div> <button class="reset-button" data-action="search-reset" id="clearButton" aria-label="Clear content" style="display: none" > <span class="a11y">Clear search query</span> </button> </div> <div data-action="dropdown" class="dropdown" role="listbox" tabindex="0" id="listboxId-1" aria-labelledby="dropdownLabel" style="display: none"> <div id="dropdownLabel-1" class="visually-hidden">Choose an option:</div> </div> <div aria-live="polite" data-action="search-live-region" role="status" class="visually-hidden"> </div> </div> <div class="search-error hidden" data-action="error-message" aria-live="polite"></div> </form> </div> </div> <div class="right-column"> <div class="search-button" data-action="mobile-search"> <span class="a11y">Search</span> </div> <div class="local-nav-buttons-container"> <a class="create-post-button button button-block button-neutral button-reduced" data-action="ask-question" href="/forums/post/question" aria-label="Ask a Post" data-cy="askAQuestion" > Post </a> </div> <div class="profile-dropdown"> <div class="dropdown" data-action="profile-drop-down" data-action-auto-alignment="true" data-auto-focus-first-item="true"> <button class="drop-down-button user-login interactive " aria-haspopup="true" aria-expanded="false" data-action="drop-down-button"> <span class="a11y">Profile</span> </button> <span class="arrow" aria-hidden="true">▲</span> <ul class="drop-down-menu userlogin hidden center " data-default-alignment="center" data-action="drop-down-menu" role="menu"> <li class="menu-item" role="presentation" > <a role="menuitem" class="menu-item-link" href="/forums/login" data-action="drop-down-menu-item" aria-current="false" > Sign in </a> </li> <li class="menu-item" role="presentation" > <a role="menuitem" class="menu-item-link" href="/forums/login#" data-action="drop-down-menu-item" aria-current="false" > Create account </a> </li> </ul> </div> </div> </div> <div class="hide-desktop-flex search-mobile-container"> <form action="/forums/search" class="search-form" method="GET" data-action="search-form" role="search" aria-label="Developer Forums" novalidate="novalidate"> <label for="search-forums-2" class="a11y">Search by keywords or tags</label> <div class="input-container"> <div class="editable-container" role="combobox" aria-expanded="false" aria-controls="listboxId-2" aria-haspopup="listbox" aria-label="Choose a topic"> <button class="submit-button" type="submit" data-action="submit-button"> <span class="a11y">Submit Search</span> </button> <div contenteditable="true" id="search-forums-2" class="search-form-input with-tooltip" data-cy="search" role="textbox" aria-multiline="false" aria-required="true" aria-invalid="false" data-action="search-input" placeholder="Search by keywords or tags" spellcheck="false" tabindex="0" aria-multiline="false" maxlength="250" aria-autocomplete="list" aria-label="Search forums" ></div> <button class="reset-button" data-action="search-reset" id="clearButton" aria-label="Clear content" style="display: none" > <span class="a11y">Clear search query</span> </button> </div> <div data-action="dropdown" class="dropdown" role="listbox" tabindex="0" id="listboxId-2" aria-labelledby="dropdownLabel" style="display: none"> <div id="dropdownLabel-2" class="visually-hidden">Choose an option:</div> </div> <div aria-live="polite" data-action="search-live-region" role="status" class="visually-hidden"> </div> </div> <div class="search-error hidden" data-action="error-message" aria-live="polite"></div> </form> </div> </nav> <div id="main-content"> <main class="page" role="main"> <div id="status" class="visually-hidden" data-action="aria-live" role="status" aria-live="polite"> </div> <section class="tag-overview" role="region" aria-label="Security tag information"> <div class="tag-content no-image"> <div class="tag-title-and-rss"> <h2 data-cy="tagTitle" class="tag-title" data-action="tag-title" data-tag-title="Security">Security</h2> <a href="/forums/tags/rssFeed/security" class="rss-feed"> <span class="a11y" data-action="a11y-message">RSS for tag</span> </a> </div> <p class="tag-info">Secure the data your app manages and control access to your app using the Security framework.</p> <p class="tag-links"> <a href="https://developer.apple.com/documentation/Security" target="_blank" class="icon icon-after icon-chevronright" aria-label="Security Documentation (Opens in new window)">Security Documentation</a> </p> </div> </section> <section role="region" aria-labelledby="tag-posts"> <h2 class="a11y" id="tag-posts">Posts under Security tag</h2> <div class="header"> <span class="search-results"> 200 Posts </span> <div class="post-filters"> <div class="sort-by"> <span class="label" id="sortLabel">Sort by:</span> <div class="dropdown" data-action="tag-landing-dropdown"> <button class="drop-down-button text interactive" aria-haspopup="true" aria-expanded="false" data-action="drop-down-button"> <span class="a11y">Posts sorted by</span> <span class="icon icon-after icon-chevrondown" data-action="drop-down-button-text">Newest</span> </button> <ul class="drop-down-menu text hidden left " data-default-alignment="left" data-action="drop-down-menu" role="menu"> <li class="menu-item" role="presentation" > <a role="menuitem" class="menu-item-link" href="/forums/tags/security?sortBy=newest" data-action="drop-down-menu-item" aria-current="false" > Newest </a> </li> <li class="menu-item" role="presentation" > <a role="menuitem" class="menu-item-link" href="/forums/tags/security?sortBy=oldest" data-action="drop-down-menu-item" aria-current="false" > Oldest </a> </li> <li class="menu-item" role="presentation" > <a role="menuitem" class="menu-item-link" href="/forums/tags/security?sortBy=lastUpdated" data-action="drop-down-menu-item" aria-current="false" > Last updated </a> </li> </ul> </div> </div> </div> </div> <div class="content-list-wrapper" data-tour="table-view" role="table" aria-label="Posts" aria-describedby="content-list-description" aria-rowcount="22" > <div class="content-list-titles " role="row" > <div class="content-post-title" data-action="content-post-title"> <h2 class="header-title content-list-title" id="content-list-description" role="columnheader" aria-sort="none" > Post </h2> </div> <div class="content-list-stats-titles "> <h3 class="header-title" role="columnheader" aria-sort="none"> Replies </h3> <h3 class="header-title" role="columnheader" aria-sort="none"> Boosts </h3> <h3 class="header-title" role="columnheader" aria-sort="none"> Views </h3> <h3 class="header-title" role="columnheader" aria-sort="none"> Activity </h3> </div> </div> <div class="content-list" role="row"> <article class="article-entry " role="article" value="707279021" aria-labelledby="post-707279021" aria-describedby="post-status-707279021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/707279" data-action="post-title" > <span class="action-icons pinned" data-tour="pinned"> <!-- Answered --> </span> <span class="action-icons locked"> <!-- thread.common.locked --> </span> <span class="underline">Security Resources</span></a> </div> <div> <div class="excerpt "> General: Apple Platform Security support document Security Overview Cryptography: DevForums tags: Security, Apple CryptoKit Security framework documentation Apple CryptoKit framework documentation Common Crypto man pages — For the full list of pages, run: % man -k 3cc For more information about man pages, see Reading UNIX Manual Pages. On Cryptographic Key Formats DevForums post SecItem attributes for keys DevForums post CryptoCompatibility sample code Keychain: DevForums tags: Security Security > Keychain Items documentation TN3137 On Mac keychain APIs and implementations SecItem Fundamentals DevForums post SecItem Pitfalls and Best Practices DevForums post Investigating hard-to-reproduce keychain problems DevForums post Smart cards and other secure tokens: DevForums tag: CryptoTokenKit CryptoTokenKit framework documentation Mac-specific resources: DevForums tags: Security Foundation, Security Interface Security Foundation framework documentation Security Interface framework documentation BSD Privilege Escalation on macOS Related: Networking Resources — This covers high-level network security, including HTTPS and TLS. Network Extension Resources — This covers low-level network security, including VPN and content filters. Code Signing Resources Notarisation Resources Trusted Execution Resources — This includes Gatekeeper. App Sandbox Resources Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/cryptotokenkit" rel="tag"> CryptoTokenKit </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/apple-cryptokit" rel="tag"> Apple CryptoKit </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 0 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 2.7k </div> <div class="mobile-icon timestamp" role="cell"> 3w </div> </div> </article> <article class="article-entry " role="article" value="724023021" aria-labelledby="post-724023021" aria-describedby="post-status-724023021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/724023" data-action="post-title" > <span class="action-icons pinned" data-tour="pinned"> <!-- Answered --> </span> <span class="action-icons locked"> <!-- thread.common.locked --> </span> <span class="underline">SecItem: Fundamentals</span></a> </div> <div> <div class="excerpt "> I regularly help developers with keychain problems, both here on DevForums and for my Day Job™ in DTS. Many of these problems are caused by a fundamental misunderstanding of how the keychain works. This post is my attempt to explain that. I wrote it primarily so that Future Quinn™ can direct folks here rather than explain everything from scratch (-: If you have questions or comments about any of this, put them in a new thread and apply the Security tag so that I see it. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" SecItem: Fundamentals or How I Learned to Stop Worrying and Love the SecItem API The SecItem API seems very simple. After all, it only has four function calls, how hard can it be? In reality, things are not that easy. Various factors contribute to making this API much trickier than it might seem at first glance. This post explains the fundamental underpinnings of the keychain. For information about specific issues, see its companion post, SecItem: Pitfalls and Best Practices. Keychain Documentation Your basic starting point should be Keychain Items. If your code runs on the Mac, also read TN3137 On Mac keychain APIs and implementations. Read the doc comments in <Security/SecItem.h>. In many cases those doc comments contain critical tidbits. When you read keychain documentation [1] and doc comments, keep in mind that statements specific to iOS typically apply to iPadOS, tvOS, and watchOS as well (r. 102786959). Also, they typically apply to macOS when you target the data protection keychain. Conversely, statements specific to macOS may not apply when you target the data protection keychain. [1] Except TN3137, which is very clear about this (-: Caveat Mac Developer macOS supports two different implementations: the original file-based keychain and the iOS-style data protection keychain. If you’re able to use the data protection keychain, do so. It’ll make your life easier. TN3137 On Mac keychain APIs and implementations explains this distinction in depth. The Four Freedoms^H^H^H^H^H^H^H^H Functions The SecItem API contains just four functions: SecItemAdd(_:_:) SecItemCopyMatching(_:_:) SecItemUpdate(_:_:) SecItemDelete(_:) These directly map to standard SQL database operations: SecItemAdd(_:_:) maps to INSERT. SecItemCopyMatching(_:_:) maps to SELECT. SecItemUpdate(_:_:) maps to UPDATE. SecItemDelete(_:) maps to DELETE. You can think of each keychain item class (generic password, certificate, and so on) as a separate SQL table within the database. The rows of that table are the individual keychain items for that class and the columns are the attributes of those items. Note Except for the digital identity class, kSecClassIdentity, where the values are split across the certificate and key tables. See Digital Identities Aren’t Real in SecItem: Pitfalls and Best Practices. This is not an accident. The data protection keychain is actually implemented as an SQLite database. If you’re curious about its structure, examine it on the Mac by pointing your favourite SQLite inspection tool — for example, the sqlite3 command-line tool — at the keychain database in ~/Library/Keychains/UUU/keychain-2.db, where UUU is a UUID. WARNING Do not depend on the location and structure of this file. These have changed in the past and are likely to change again in the future. If you embed knowledge of them into a shipping product, it’s likely that your product will have binary compatibility problems at some point in the future. The only reason I’m mentioning them here is because I find it helpful to poke around in the file to get a better understanding of how the API works. For information about which attributes are supported by each keychain item class — that is, what columns are in each table — see the Note box at the top of Item Attribute Keys and Values. Alternatively, look at the Attribute Key Constants doc comment in <Security/SecItem.h>. Uniqueness A critical part of the keychain model is uniqueness. How does the keychain determine if item A is the same as item B? It turns out that this is class dependent. For each keychain item class there is a set of attributes that form the uniqueness constraint for items of that class. That is, if you try to add item A where all of its attributes are the same as item B, the add fails with errSecDuplicateItem. For more information, see the errSecDuplicateItem page. It has lists of attributes that make up this uniqueness constraint, one for each class. These uniqueness constraints are a major source of confusion, as discussed in the Queries and the Uniqueness Constraints section of SecItem: Pitfalls and Best Practices. Parameter Blocks Understanding The SecItem API is a classic ‘parameter block’ API. All of its inputs are dictionaries, and you have to know which properties to set in each dictionary to achieve your desired result. Likewise for when you read properties in output dictionaries. There are five different property groups: The item class property, kSecClass, determines the class of item you’re operating on: kSecClassGenericPassword, kSecClassCertificate, and so on. The item attribute properties, like kSecAttrAccessGroup, map directly to keychain item attributes. The search properties, like kSecMatchLimit, control how the system runs a query. The return type properties, like kSecReturnAttributes, determine what values the query returns. The value type properties, like kSecValueRef perform multiple duties, as explained below. There are other properties that perform a variety of specific functions. For example, kSecUseDataProtectionKeychain tells macOS to use the data protection keychain instead of the file-based keychain. These properties are hard to describe in general; for the details, see the documentation for each such property. Inputs Each of the four SecItem functions take dictionary input parameters of the same type, CFDictionary, but these dictionaries are not the same. Different dictionaries support different property groups: The first parameter of SecItemAdd(_:_:) is an add dictionary. It supports all property groups except the search properties. The first parameter of SecItemCopyMatching(_:_:) is a query and return dictionary. It supports all property groups. The first parameter of SecItemUpdate(_:_:) is a pure query dictionary. It supports all property groups except the return type properties. Likewise for the only parameter of SecItemDelete(_:). The second parameter of SecItemUpdate(_:_:) is an update dictionary. It supports the item attribute and value type property groups. Outputs Two of the SecItem functions, SecItemAdd(_:_:) and SecItemCopyMatching(_:_:), return values. These output parameters are of type CFTypeRef because the type of value you get back depends on the return type properties you supply in the input dictionary: If you supply a single return type property, except kSecReturnAttributes, you get back a value appropriate for that return type. If you supply multiple return type properties or kSecReturnAttributes, you get back a dictionary. This supports the item attribute and value type property groups. To get a non-attribute value from this dictionary, use the value type property that corresponds to its return type property. For example, if you set kSecReturnPersistentRef in the input dictionary, use kSecValuePersistentRef to get the persistent reference from the output dictionary. In the single item case, the type of value you get back depends on the return type property and the keychain item class: For kSecReturnData you get back the keychain item’s data. This makes most sense for password items, where the data holds the password. It also works for certificate items, where you get back the DER-encoded certificate. Using this for key items is kinda sketchy. If you want to export a key, called SecKeyCopyExternalRepresentation. Using this for digital identity items is nonsensical. For kSecReturnRef you get back an object reference. This only works for keychain item classes that have an object representation, namely certificates, keys, and digital identities. You get back a SecCertificate, a SecKey, or a SecIdentity, respectively. For kSecReturnPersistentRef you get back a data value that holds the persistent reference. Value Type Subtleties There are three properties in the value type property group: kSecValueData kSecValueRef kSecValuePersistentRef Their semantics vary based on the dictionary type. For kSecValueData: In an add dictionary, this is the value of the item to add. For example, when adding a generic password item (kSecClassGenericPassword), the value of this key is a Data value containing the password. This is not supported in a query dictionary. In an update dictionary, this is the new value for the item. For kSecValueRef: In add and query dictionaries, the system infers the class property and attribute properties from the supplied object. For example, if you supply a certificate object (SecCertificate, created using SecCertificateCreateWithData), the system will infer a kSecClass value of kSecClassCertificate and various attribute values, like kSecAttrSerialNumber, from that certificate object. This is not supported in an update dictionary. For kSecValuePersistentRef: For query dictionaries, this uniquely identifies the item to operate on. This is not supported in add and update dictionaries. Revision History 2023-09-12 Fixed various bugs in the revision history. Added a paragraph explaining how to determine which attributes are supported by each keychain item class. 2023-02-22 Made minor editorial changes. 2023-01-28 First posted. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 0 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 2.9k </div> <div class="mobile-icon timestamp" role="cell"> Jan ’25 </div> </div> </article> <article class="article-entry " role="article" value="774703021" aria-labelledby="post-774703021" aria-describedby="post-status-774703021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774703" data-action="post-title" > <span class="underline">Security Implications of fdesetup authrestart on FileVault-Enabled Macs</span></a> </div> <div> <div class="excerpt "> I'm looking for confirmation on the security aspects of fdesetup authrestart when used on a FileVault-enabled Mac. As I understand it, this command temporarily stores the decryption key in memory to allow the system to restart without requiring manual entry of the FileVault password. However, I have a few security-related concerns: Storage of the Decryption Key: Where exactly is the key stored during an authenticated restart? Is it protected within the Secure Enclave (for Apple Silicon Macs) or the T2 Security Chip on Intel Macs? Key Lifetime & Wiping: At what point is the decryption key erased from memory? Does it persist in any form after the system has fully rebooted? Protection Against Physical Attacks: If an attacker gains physical access to the machine before the restart completes, is there any possibility that they could extract the decryption key from memory? Cold Boot Attack Resistance: Is there any risk that advanced forensic techniques (such as freezing RAM to retain data) could be used to recover the decryption key after issuing an authenticated restart? Malware Resistance: Could a compromised system (e.g., root access by an attacker) intercept or misuse the decryption key before the restart? I understand that on Apple Silicon and T2-equipped Macs, FileVault keys are tied to hardware-based encryption, making unauthorized access difficult. However, I'd like to confirm whether Authenticated Restart introduces any new risks compared to a standard FileVault-enabled boot process. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/macos" rel="tag"> macOS </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/catalyst" rel="tag"> Mac Catalyst </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 0 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 35 </div> <div class="mobile-icon timestamp" role="cell"> 5h </div> </div> </article> <article class="article-entry " role="article" value="774695021" aria-labelledby="post-774695021" aria-describedby="post-status-774695021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774695" data-action="post-title" > <span class="underline">MacOS sometimes not asking for password after sleep when close lid </span></a> </div> <div> <div class="excerpt "> Sometimes, when I close the lid using the MacOs version Sequoia 15.2, with the configuration to require a password for 5 seconds, the system does not ask for the password as expected. This happens sometimes even though nothing preventing the system from sleeping when you close and open the lid, but it still seems like a security concern. Is there some known issue related to this problem or a way to avoid it? Result of command pmset -g: Configuration: </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/app-and-system-services" style="--chiclet-background-color: #FAC893;--chiclet-color: #A74300;" > App & System Services </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/app-and-system-services/app-and-system-services-core-os" style="--chiclet-background-color: #FAC8934D;--chiclet-color: #A74300;" > Core OS </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/localauthentication" rel="tag"> Local Authentication </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/managed-settings" rel="tag"> Managed Settings </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 47 </div> <div class="mobile-icon timestamp" role="cell"> 3h </div> </div> </article> <article class="article-entry " role="article" value="774576021" aria-labelledby="post-774576021" aria-describedby="post-status-774576021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774576" data-action="post-title" > <span class="underline">Import PKCS#12 into macOS login keychain or system keychain</span></a> </div> <div> <div class="excerpt "> Hello. I want to do the following and need your help. I want to import a certificate (pkcs#12) into my macOS keychain with a setting that prohibits exporting the certificate. I want to import the certificate (pkcs#12) into my login keychain or system keychain. I was able to achieve [1] with the help of the following threads, but have the following problems. https://developer.apple.com/forums/thread/677314?answerId=824644022#824644022 how to import into login keychain or system keychain How to achieve this without using the deprecated API To import into the login keychain, I could use the “SecKeychainCopyDefault” function instead of the “SecKeychainCopySearchList” function, However, both of these functions were deprecated APIs. https://developer.apple.com/documentation/security/seckeychaincopysearchlist(_:) https://developer.apple.com/documentation/security/seckeychaincopydefault(_:) I checked the following URL and it seems that using the SecItem API is correct, but I could not figure out how to use it. https://developer.apple.com/documentation/technotes/tn3137-on-mac-keychains Is there any way to import them into the login keychain or system keychain without using these deprecated APIs? </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 67 </div> <div class="mobile-icon timestamp" role="cell"> 2h </div> </div> </article> <article class="article-entry " role="article" value="774497021" aria-labelledby="post-774497021" aria-describedby="post-status-774497021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774497" data-action="post-title" > <span class="underline">Fails to capture IOUSBHostInterface with macOS 15.3 despite root privileges in app</span></a> </div> <div> <div class="excerpt "> I have an app that captures USB storage device and sends some commands to it. The app has a privilege helper tool which captures the USB device. Everything was working fine upto macOS 15.2 but it 15.3 update broke the functionality. When the helper tool tries to capture the USB device, it is able to capture IOUSBHostDevice but fails to capture IOUSBHostInterface. The error is Code: 3758097097; Domain: IOUSBHostErrorDomain; Description: Failed to create IOUSBHostInterface.; Reason: Failed [super init] I have verified the UID, EUID, GID, EGID = 0 for the helper process. So by IOUSBHost documentation it should have worked. The code that cause the error inside the helper tool is func captureUSBInterface(interface: io_service_t) -> IOUSBHostInterface? { let queue = DispatchQueue(label: "com.example.usbdevice.queue2") var capturedInterface: IOUSBHostInterface? do { capturedInterface = try IOUSBHostInterface(__ioService: interface, options: .deviceCapture, queue: queue, interestHandler: nil) } catch { NSLog("Failed to capture USB interface: \(error)") return nil } return capturedInterface } The app has sandbox=False and is distributed outside of the App Store. Please advise (long-term, short-term solutions) on how to make this work. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/app-and-system-services" style="--chiclet-background-color: #FAC893;--chiclet-color: #A74300;" > App & System Services </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/app-and-system-services/app-and-system-services-drivers" style="--chiclet-background-color: #FAC8934D;--chiclet-color: #A74300;" > Drivers </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/iousbhost" rel="tag"> IOUSBHost </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 85 </div> <div class="mobile-icon timestamp" role="cell"> 18h </div> </div> </article> <article class="article-entry " role="article" value="774424021" aria-labelledby="post-774424021" aria-describedby="post-status-774424021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774424" data-action="post-title" > <span class="underline">full disk access granted, but app fails to load file from user folder</span></a> </div> <div> <div class="excerpt "> i recently upgraded to sequoia, and now, more often than not, when running in the debugger, opening my database causes a hang: When i run outside the debugger, it opens just fine. I suspect it has to do with "full disk access"? but i've given my app full disk access. i've also set Qt and Xcode to have "Allow apps to use developer tools" permissions. as a test i also added my app into that permission group, all to no avail. the path to the DB being opened is in my user's Music folder, and having full disk access gives permission for everything, including things in that folder. confused! </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/app-and-system-services" style="--chiclet-background-color: #FAC893;--chiclet-color: #A74300;" > App & System Services </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/app-and-system-services/app-and-system-services-core-os" style="--chiclet-background-color: #FAC8934D;--chiclet-color: #A74300;" > Core OS </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/debugging" rel="tag"> Debugging </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/app-sandbox" rel="tag"> App Sandbox </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/files-and-storage" rel="tag"> Files and Storage </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 86 </div> <div class="mobile-icon timestamp" role="cell"> 4d </div> </div> </article> <article class="article-entry " role="article" value="774315021" aria-labelledby="post-774315021" aria-describedby="post-status-774315021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774315" data-action="post-title" > <span class="underline"> iOS Biometric Authentication Implementation when biometric is added</span></a> </div> <div> <div class="excerpt "> Current Setup: Using Secure Enclave with userPresence access control Foreground keychain accessibility: whenPasscodeSetThisDeviceOnly Security Requirement: Our security group wants us to invalidate biometrics and require a username/password if a biometric item is added (potentially by a hostile 3rd party) Need to upgrade from userPresence to biometricCurrentSet to ensure re-authentication when biometric credentials change. Issue: After implementing biometricCurrentSet, authentication cancels after two failed biometric attempts instead of falling back to passcode. Current Detection Method: User completes initial biometric authentication Biometric changes occur (undetectable by app) App attempts Secure Enclave access Access denial triggers re-authentication requirement Cannot revoke refresh token after access is denied Security Concern: Current implementation allows new biometric enrollments to access existing authenticated sessions without re-verification. Question: What's the recommended approach to: Implement biometricCurrentSet while maintaining passcode fallback Properly handle refresh token invalidation when biometric credentials change Looking for guidance on best practices for implementing these security requirements while maintaining good UX. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/face-id" rel="tag"> Face ID </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/touch-id" rel="tag"> Touch ID </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 0 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 103 </div> <div class="mobile-icon timestamp" role="cell"> 6d </div> </div> </article> <article class="article-entry " role="article" value="774199021" aria-labelledby="post-774199021" aria-describedby="post-status-774199021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774199" data-action="post-title" > <span class="underline">iPhone lockdown – security feature</span></a> </div> <div> <div class="excerpt "> I must be missing something. How can an iphone that is in lockdown mode, using ONLY data, no Bluetooth connected and only one singular iPhone have seven UNLISTED items on the local network in privacy and settings? </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/network" rel="tag"> Network </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 76 </div> <div class="mobile-icon timestamp" role="cell"> 6d </div> </div> </article> <article class="article-entry " role="article" value="774206021" aria-labelledby="post-774206021" aria-describedby="post-status-774206021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/774206" data-action="post-title" > <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">转让app后访问不到原有的keychain</span></a> </div> <div> <div class="excerpt "> 转让app成功了之后,由于开发者账号更改,团队ID改变,导致获取不到原有的keychain中缓存的用户数据,所以在用户进行登录时,无法登录到原有的老账号,而是被识别成了一个新的用户。这种情况怎么解决。 </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 109 </div> <div class="mobile-icon timestamp" role="cell"> 1w </div> </div> </article> <article class="article-entry " role="article" value="773908021" aria-labelledby="post-773908021" aria-describedby="post-status-773908021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773908" data-action="post-title" > <span class="underline">Call/IMessage/Facetime Logs</span></a> </div> <div> <div class="excerpt "> I'm looking to integrate call / text / facetime history into my app while maintaining the necessary security for the end user. I only need date stamp and contact link or name of the person communicated with, no access to content of messages etc. How would this be accomplished? </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/app-and-system-services" style="--chiclet-background-color: #FAC893;--chiclet-color: #A74300;" > App & System Services </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/app-and-system-services/app-and-system-services-general" style="--chiclet-background-color: #FAC8934D;--chiclet-color: #A74300;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/developer-tools" rel="tag"> Developer Tools </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/accessibility" rel="tag"> Accessibility </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/contacts" rel="tag"> Contacts </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 0 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 115 </div> <div class="mobile-icon timestamp" role="cell"> 1w </div> </div> </article> <article class="article-entry " role="article" value="773796021" aria-labelledby="post-773796021" aria-describedby="post-status-773796021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773796" data-action="post-title" > <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">Reduced certificate lifespan: CA root</span></a> </div> <div> <div class="excerpt "> I have some concerns related to shortening the lifetime of certificates, as per https://support.apple.com/en-gb/102028 Does this apply to Private CA root certificates? And if yes: does it apply if I use ATS and higher level API like URLSession does it apply it I carry my root CA cert in my app payload and use low level libraries without ATS support? </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/app-and-system-services" style="--chiclet-background-color: #FAC893;--chiclet-color: #A74300;" > App & System Services </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/app-and-system-services/app-and-system-services-networking" style="--chiclet-background-color: #FAC8934D;--chiclet-color: #A74300;" > Networking </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/network" rel="tag"> Network </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 5 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 198 </div> <div class="mobile-icon timestamp" role="cell"> 1w </div> </div> </article> <article class="article-entry " role="article" value="773777021" aria-labelledby="post-773777021" aria-describedby="post-status-773777021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773777" data-action="post-title" > <span class="action-icons locked"> <!-- thread.common.locked --> </span> <span class="underline">Importing a PEM-based RSA Private Key and its Certificate</span></a> </div> <div> <div class="excerpt "> This post is an extension to Importing Cryptographic Keys that covers one specific common case: importing a PEM-based RSA private key and its certificate to form a digital identity. If you have questions or comments, start a new thread in Privacy & Security > General. Tag your thread with Security so that I see it. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Importing a PEM-based RSA Private Key and its Certificate I regularly see folks struggle to import an RSA private key and its corresponding certificate. Importing Cryptographic Keys outlines various options for importing keys, but in this post I want to cover one specific case, namely, a PEM-based RSA private key and its corresponding certificate. Together these form a digital identity, represented as a SecIdentity object. IMPORTANT If you can repackage your digital identity as a PKCS#12, please do. It’s easy to import that using SecPKCS12Import. If you can switch to an elliptic curve (EC) private key, please do. It’s generally better and Apple CryptoKit has direct support for importing an EC PEM. Assuming that’s not the case, let’s explore how to import a PEM-base RSA private key and its corresponding certificate to form a digital identity. Note The code below was built with Xcode 16.2 and tested on the iOS 18.2 simulator. It uses the helper routines from Calling Security Framework from Swift. This code assumes the data protection keychain. If you’re targeting macOS, add kSecUseDataProtectionKeychain to all the keychain calls. See TN3137 On Mac keychain APIs and implementations for more background to that. Unwrap the PEM To start, you need to get the data out of the PEM: /// Extracts the data from a PEM. /// /// As PEM files can contain a large range of data types, you must supply the /// expected prefix and suffix strings. For example, for a certificate these /// are `"-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`. /// /// - important: This assumes the simplest possible PEM format. It does not /// handle metadata at the top of the PEM or PEMs with multiple items in them. func dataFromPEM(_ pem: String, _ expectedPrefix: String, _ expectedSuffix: String) -> Data? { let lines = pem.split(separator: "\n") guard let first = lines.first, first == expectedPrefix, let last = lines.last, last == expectedSuffix else { return nil } let base64 = lines.dropFirst().dropLast().joined() guard let data = Data(base64Encoded: base64) else { return nil } return data } IMPORTANT Read the doc comment to learn about some important limitations with this code. Import a Certificate When adding a digital identity to the keychain, it’s best to import the certificate and the key separately and then add them to the keychain. That makes it easier to track down problems you encounter. To import a PEM-based certificate, extract the data from the PEM and call SecCertificateCreateWithData: /// Import a certificate in PEM format. /// /// - important: See ``dataFromPEM(_:_:_:)`` for some important limitations. func importCertificatePEM(_ pem: String) throws -> SecCertificate { guard let data = dataFromPEM(pem, "-----BEGIN CERTIFICATE-----", "-----END CERTIFICATE-----"), let cert = SecCertificateCreateWithData(nil, data as NSData) else { throw NSError(domain: NSOSStatusErrorDomain, code: Int(errSecParam), userInfo: nil) } return cert } Here’s an example that shows this in action: let benjyCertificatePEM = """ -----BEGIN CERTIFICATE----- MIIC4TCCAcmgAwIBAgIBCzANBgkqhkiG9w0BAQsFADAfMRAwDgYDVQQDDAdNb3Vz ZUNBMQswCQYDVQQGEwJHQjAeFw0xOTA5MzAxNDI0NDFaFw0yOTA5MjcxNDI0NDFa MB0xDjAMBgNVBAMMBUJlbmp5MQswCQYDVQQGEwJHQjCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAOQe5ai68FQhTVIgpsDK+UOPIrgKzqJcW+wwLnJRp6GV V9EmifJq7wjrXeqmP1XgcNtu7cVhDx+/ONKl/8hscak54HTQrgwE6mK628RThld9 BmZoOjaWWCkoU5bH7ZIYgrKF1tAO5uTAmVJB9v7DQQvKERwjQ10ZbFOW6v8j2gDL esZQbFIC7f/viDXLsPq8dUZuyyb9BXrpEJpXpFDi/wzCV3C1wmtOUrU27xz4gBzi 3o9O6U4QmaF91xxaTk0Ot+/RLI70mR7TYa+u6q7UW/KK9q1+8LeTVs1x24VA5csx HCAQf+xvMoKlocmUxCDBYkTFkmtyhmGRN52XucHgu0kCAwEAAaMqMCgwDgYDVR0P AQH/BAQDAgWgMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA A4IBAQAyrArH7+IyHTyEOrv/kZr3s3h4HWczSVeiO9qWD03/fVew84J524DiSBK4 mtAy3V/hqXrzrQEbsfyT7ZhQ6EqB/W0flpVYbku10cSVgoeSfjgBJLqgJRZKFonv OQPjTf9HEDo5A1bQdnUF1y6SwdFaY16lH9mZ5B8AI57mduSg90c6Ao1GvtbAciNk W8y4OTQp4drh18hpHegrgTIbuoWwgy8V4MX6W39XhkCUNhrQUUJk3mEfbC/yqfIG YNds0NRI3QCTJCUbuXvDrLEn4iqRfbzq5cbulQBxBCUtLZFFjKE4M42fJh6D6oRR yZSx4Ac3c+xYqTCjf0UdcUGxaxF/ -----END CERTIFICATE----- """ print(try? importCertificatePEM(benjyCertificatePEM)) If you run this it prints: Optional(<cert(0x11e304c10) s: Benjy i: MouseCA>) Import a Private Key To import a PEM-base RSA private key, extract the data from the PEM and call SecKeyCreateWithData: /// Import an 2048-bit RSA private key in PEM format. /// /// Don’t use this code if: /// /// * If you can switch to an EC key. EC keys are generally better and, for /// this specific case, there’s support for importing them in Apple CryptoKit. /// /// * You can switch to using a PKCS#12. In that case, use the system’s /// `SecPKCS12Import` routine instead. /// /// - important: See ``dataFromPEM(_:_:_:)`` for some important limitations. func importRSA2048PrivateKeyPEM(_ pem: String) throws -> SecKey { // Most private key PEMs are in PKCS#8 format. There’s no way to import // that directly. Instead you need to strip the header to get to the // `RSAPrivateKey` data structure encapsulated within the PKCS#8. Doing that // in the general case is hard. In the specific case of an 2048-bit RSA // key, the following hack works. let rsaPrefix: [UInt8] = [ 0x30, 0x82, 0x04, 0xBE, 0x02, 0x01, 0x00, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x04, 0xA8, ] guard let pkcs8 = dataFromPEM(pem, "-----BEGIN PRIVATE KEY-----", "-----END PRIVATE KEY-----"), pkcs8.starts(with: rsaPrefix) else { throw NSError(domain: NSOSStatusErrorDomain, code: Int(errSecParam), userInfo: nil) } let rsaPrivateKey = pkcs8.dropFirst(rsaPrefix.count) return try secCall { SecKeyCreateWithData(rsaPrivateKey as NSData, [ kSecAttrKeyType: kSecAttrKeyTypeRSA, kSecAttrKeyClass: kSecAttrKeyClassPrivate, ] as NSDictionary, $0) } } IMPORTANT This code only works with 2048-bit RSA private keys. The comments explain more about that limitation. Here’s an example that shows this in action: let benjyPrivateKeyPEM = """ -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDkHuWouvBUIU1S IKbAyvlDjyK4Cs6iXFvsMC5yUaehlVfRJonyau8I613qpj9V4HDbbu3FYQ8fvzjS pf/IbHGpOeB00K4MBOpiutvEU4ZXfQZmaDo2llgpKFOWx+2SGIKyhdbQDubkwJlS Qfb+w0ELyhEcI0NdGWxTlur/I9oAy3rGUGxSAu3/74g1y7D6vHVGbssm/QV66RCa V6RQ4v8MwldwtcJrTlK1Nu8c+IAc4t6PTulOEJmhfdccWk5NDrfv0SyO9Jke02Gv ruqu1FvyivatfvC3k1bNcduFQOXLMRwgEH/sbzKCpaHJlMQgwWJExZJrcoZhkTed l7nB4LtJAgMBAAECggEBAKOPF6ED776SZgrliEog/dmXrhABB6jXybytyw+CRkuP dXhrRmr+isZ9Y0gTzMN4+dILVgW4EozzoP0/sgZ04oWwDqQS30eU2qzRRzMbo+3k oYsZXeu3nhxcYppwXIDsfAEd/ygMFzaadRPKYhrFykR2rA/dpLYCvW2tfm5SuULp RxnKykFlVi8yVT64AovVm0XGOy/QTO5BBbUdftvZY9QCjGn/IEL8QFEz0rxZsb2L s0HgVMUcB1My38RksZQRKLMWCtqLqWnez3oCnPka+dxFQj5RU//vNtRoVh1ExbmW txHz48v00AKQvaudC4ujIspZlY8+UPdYQT0TNjhsfoUCgYEA+7yEvyCgRtYwUNm6 jHTg67LoSldHwENOry63qGZp3rCkWBkPXle7ulgRtuw+e11g4MoMMAgkIGyIGB/Z 6YvnQGmJCTMw+HHIyw3k/OvL1iz4DM+QlxDuD79Zu2j2UIL4maDG0ZDskiJujVAf sFOy4r36TvYedmd7qgh9pgpsFl8CgYEA5/v8PZDs2I1wSDGllGfTr6aeQcxvw98I p8l/8EV/lYpdKQMFndeFZI+dnJCcTeBbeXMmPNTAdL5gOTwDReXamIAdr93k7/x6 iKMHzBrpQZUMEhepSd8zdR1+vLvyszvUU6lvNXcfjwbu7gJQkwbA6kSoXRN+C1Cv i5/w66t0f1cCgYBt02FWwTUrsmaB33uzq4o1SmhthoaXKsY5R3h4z7WAojAQ/13l GwGb2rBfzdG0oJiTeZK3odWhD7iQTdUUPyU0xNY0XVEQExQ3AmjUr0rOte/CJww9 2/UAicrsKG7N0VYEMFCNPVz4pGz22e35T4rLwXZi3J2NqrgZBntK5WEioQKBgEyx L4ii+sn0qGQVlankUUVGjhcuoNxeRZxCrzsdnrovTfEbAKZX88908yQpYqMUQul5 ufBuXVm6/lCtmF9pR8UWxbm4X9E+5Lt7Oj6tvuNhhOYOUHcNhRN4tsdqUygR5XXr E8rXIOXF4wNoXH7ewrQwEoECyq6u8/ny3FDtE8xtAoGBALNFxRGikbQMXhUXj7FA lLwWlNydCxCc7/YwlHfmekDaJRv59+z7SWAR15azhbjqS9oXWJUQ9uvpKF75opE7 MT0GzblkKAYu/3uhTENCjQg+9RFfu5w37E5RTWHD2hANV0YqXUlmH3d+f5uO0xN7 7bpqwYuYzSv1hBfU/yprDco6 -----END PRIVATE KEY----- """ print(try? importRSA2048PrivateKeyPEM(benjyPrivateKeyPEM)) If you run this it prints: Optional(<SecKeyRef algorithm id: 1, key type: RSAPrivateKey, version: 4, 2048 bits (block size: 256), addr: 0x600000c5ce50>) Form a Digital Identity There are two common ways to form a digital identity: SecPKCSImport SecItemCopyMatching SecPKCSImport is the most flexible because it gives you an in-memory digital identity. You can then choose to add it to the keychain or not. However, it requires a PKCS#12 as input. If you’re starting out with separate private key and certificate PEMs, you have to use SecItemCopyMatching. Note macOS also has SecIdentityCreateWithCertificate, but it has some seriously limitations. First, it’s only available on macOS. Second, it requires the key to be in the keychain. If you’re going to add the key to the keychain anyway, you might as well use SecItemCopyMatching. To form a digital identity from a separate private key and certificate: Add the certificate to the keychain. Add the private key to the keychain. Call SecItemCopyMatching to get back a digital identity. Here’s an example of that in action: /// Imports a digital identity composed of separate certificate and private key PEMs. /// /// - important: See ``dataFromPEM(_:_:_:)`` for some important limitations. /// See ``importRSA2048PrivateKeyPEM(_:)`` for alternative strategies that are /// much easier to deploy. func addRSA2048DigitalIdentityPEMToKeychain(certificate: String, privateKey: String) throws -> SecIdentity { // First import the certificate and private key. This has the advantage in // that it triggers an early failure if the data is in the wrong format. let certificate = try importCertificatePEM(certificate) let privateKey = try importRSA2048PrivateKeyPEM(privateKey) // Check that the private key matches the public key in the certificate. If // not, someone has given you bogus credentials. let certificatePublicKey = try secCall { SecCertificateCopyKey(certificate) } let publicKey = try secCall { SecKeyCopyPublicKey(privateKey) } guard CFEqual(certificatePublicKey, publicKey) else { throw NSError(domain: NSOSStatusErrorDomain, code: Int(errSecPublicKeyInconsistent)) } // Add the certificate first. If that fails — and the most likely error is // `errSecDuplicateItem` — we want to stop immediately. try secCall { SecItemAdd([ kSecValueRef: certificate, ] as NSDictionary, nil) } // The add the private key. do { try secCall { SecItemAdd([ kSecValueRef: privateKey, ] as NSDictionary, nil) } } catch let error as NSError { // We ignore a `errSecDuplicateItem` error when adding the key. It’s // possible to have multiple digital identities that share the same key, // so if you try to add the key and it’s already in the keychain then // that’s fine. guard error.domain == NSOSStatusErrorDomain, error.code == errSecDuplicateItem else { throw error } } // Finally, search for the resulting identity. // // I originally tried querying for the identity based on the certificate’s // attributes — the ones that contribute to uniqueness, namely // `kSecAttrCertificateType`, `kSecAttrIssuer`, and `kSecAttrSerialNumber` — // but that failed for reasons I don't fully understand (r. 144152660). So // now I get all digital identities and find the one with our certificate. let identities = try secCall { SecItemCopyMatching([ kSecClass: kSecClassIdentity, kSecMatchLimit: kSecMatchLimitAll, kSecReturnRef: true, ] as NSDictionary, $0) } as! [SecIdentity] let identityQ = try identities.first { i in try secCall { SecIdentityCopyCertificate(i, $0) } == certificate } return try secCall(Int(errSecItemNotFound)) { identityQ } } IMPORTANT This code is quite subtle. Read the comments for an explanation as to why it works the way it does. Further reading For more information about the APIs and techniques used above, see: Importing Cryptographic Keys On Cryptographic Keys Formats SecItem: Fundamentals SecItem: Pitfalls and Best Practices Calling Security Framework from Swift TN3137 On Mac keychain APIs and implementations Finally, for links to documentation and other resources, see Security Resources. Revision History 2025-02-13 Added code to check for mismatched private key and certificate. 2025-02-04 First posted. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 0 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 108 </div> <div class="mobile-icon timestamp" role="cell"> 5d </div> </div> </article> <article class="article-entry " role="article" value="773739021" aria-labelledby="post-773739021" aria-describedby="post-status-773739021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773739" data-action="post-title" > <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">iOS 18 - Intermittent keychain issue</span></a> </div> <div> <div class="excerpt "> Hi, We're encountering an intermittent issue where certain users are unexpectedly logged out of our app and unable to log in again. We believe we've narrrowed down the issue to the Keychain due to the following reasons: We use a keychain item to determine if the member is logged in or not. Failure to retrieve the value leads the app to believe the member is logged out. API error logs on the server show 3 missing values in fields that are each populated from items stored in the keychain. Additional Notes: The issue is hard to reproduce and seems to affect only a subset of users. In some cases, uninstalling and reinstalling the app temporarily resolves the problem, but the issue recurs after a period of time. The behavior appears to have coincided with the release of iOS 18. We’re using the “kSecAttrAccessibleWhenUnlocked” accessibility attribute. Given that our app doesn’t perform background operations, we wouldn’t expect this to be an issue. We’re also considering changing this to "kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly" to see if this might resolve the issue. We're the keychain-swift library to interact with the keychain. We are currently adding extensive logging around our keychain implementation to confirm our findings but are looking for any additional input. Questions: Has anyone encountered similar keychain behavior on iOS 18? Are there known changes or stability issues with the keychain in iOS 18 that might lead to such intermittent “item not found” errors? Any recommended workarounds or troubleshooting steps that could help isolate the problem further? Thanks for any help you can provide. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 178 </div> <div class="mobile-icon timestamp" role="cell"> 2w </div> </div> </article> <article class="article-entry " role="article" value="773691021" aria-labelledby="post-773691021" aria-describedby="post-status-773691021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773691" data-action="post-title" > <span class="action-icons answered" data-tour="solved"> <!-- Answered --> </span> <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">Launch constraints using LightweightCodeRequirements framework</span></a> </div> <div> <div class="excerpt "> MacOS Version: 14.7.2 macOS SDKs: macOS 14.5 -sdk macosx14.5 I am working on a sample program for validation Against: Team Identifier Developer ID I started with validating Team Identifier, but my validation is not working and it is allowing to launch programs which are not matching the team identifier in the signature. Below is my code: func verifyExecutableWithLCR(executablePath: String, arguments: [String]) -&gt; Bool { let task = Process() task.launchPath = executablePath task.arguments = arguments if #available(macOS 14.4, *) { print("launchRequirementData is available on this system.") do { let req = try OnDiskCodeRequirement.allOf { TeamIdentifier("ABCDEFGHI") //SigningIdentifier("com.***.client.***-Client.****") } let encoder = PropertyListEncoder() encoder.outputFormat = .xml let requirementData = try encoder.encode(req) task.launchRequirementData = requirementData print("launchRequirementData is set.") try task.run() print("[SUCCESS] Executable passed the code signature verification.") return true } catch { print("[ERROR] Code signature verification failed: \(error.localizedDescription)") return false } } else { print("[WARNING] launchRequirement is not available on this macOS version.") return false } } Could you please help me in identifying whay am I doing wrong here? </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/app-and-system-services" style="--chiclet-background-color: #FAC893;--chiclet-color: #A74300;" > App & System Services </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/app-and-system-services/processes-and-concurrency" style="--chiclet-background-color: #FAC8934D;--chiclet-color: #A74300;" > Processes & Concurrency </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/code-signing" rel="tag"> Code Signing </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 7 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 230 </div> <div class="mobile-icon timestamp" role="cell"> 1w </div> </div> </article> <article class="article-entry " role="article" value="773613021" aria-labelledby="post-773613021" aria-describedby="post-status-773613021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773613" data-action="post-title" > <span class="underline">Screen recording detect in MACOs Apps</span></a> </div> <div> <div class="excerpt "> Hi, My MACOS app has sensitive content and dont want user to take screenshot or to record the screen. I tries window.sharingType=none. With this user can still record the screen. I know that user can record with external device. But we dont want him to record using screen capture. Can you please tell me how to detect when screen recording is active in MACOs apps? or how to prevent screen recording in MACOs apps. Thanks </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/appkit" rel="tag"> AppKit </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 0 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 147 </div> <div class="mobile-icon timestamp" role="cell"> 2w </div> </div> </article> <article class="article-entry " role="article" value="773344021" aria-labelledby="post-773344021" aria-describedby="post-status-773344021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773344" data-action="post-title" > <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">What is the alternative to Environment and Library Constraints before macOS 14.0?</span></a> </div> <div> <div class="excerpt "> In the macOS 14.0 SDK, environment and library constraints were introduced, which made defense against common attack vectors relatively simple (especially with the LightWeightCodeRequirements framework added in 14.4). Now, the application I'm working on must support macOS 13.0 too, so I was looking into alternatives that do work for those operating systems as well. What I found myself is that the SecCode/SecStaticCode APIs in the Security Framework do offer very similar fashion checks as the LightWeightCodeRequirements framework does: SecCodeCopySigningInformation can return values like signing identifier, team identifier, code requirement string and so on. SecStaticCodeCreateWithPath can return a SecStaticCode object to an executable/app bundle on the file system. Let's say, I would want to protect myself against launchd executable swap. From macOS 14.0 onward, I would use a Spawn Constraint for this, directly in the launchd.plist file. Before macOS 14.0, I would create a SecStaticCode object for the executable path found in the launchd.plist, and then examine its SecCodeCopySigningInformation dictionary. If the expectations are met, only then would I execute the launchd.plist-defined executable or connect to it via XPC. Are these two equivalent? If not, what are the differences? </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/macos" rel="tag"> macOS </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/xpc" rel="tag"> XPC </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/code-signing" rel="tag"> Code Signing </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 3 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 326 </div> <div class="mobile-icon timestamp" role="cell"> 2w </div> </div> </article> <article class="article-entry " role="article" value="773025021" aria-labelledby="post-773025021" aria-describedby="post-status-773025021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773025" data-action="post-title" > <span class="action-icons answered" data-tour="solved"> <!-- Answered --> </span> <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">How to perform actions as root from GUI apps on macOS?</span></a> </div> <div> <div class="excerpt "> I'm building a tool for admins in the enterprise context. The app needs to do some things as root, such as executing a script. I was hoping to implement a workflow where the user clicks a button, then will be shown the authentication prompt, enter the credentials and then execute the desired action. However, I couldn't find a way to implement this. AuthorizationExecuteWithPrivileges looked promising, but that's deprecated since 10.7. I've now tried to use a launch daemon that's contained in the app bundle with XPC, but that seems overly complicated and has several downsides (daemon with global machservice and the approval of a launch daemon suggests to the user that something's always running in the background). Also I'd like to stream the output of the executed scripts in real time back to the UI which seems very complicated to implement in this fashion. Is there a better way to enable an app to perform authorized privilege escalation for certain actions? What about privileged helper tools? I couldn't find any documentation about them. I know privilege escalation is not allowed in the App Store, but that's not relevant for us. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/securityinterface" rel="tag"> Security Interface </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/securityfoundation" rel="tag"> Security Foundation </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 4 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 248 </div> <div class="mobile-icon timestamp" role="cell"> 3w </div> </div> </article> <article class="article-entry " role="article" value="773016021" aria-labelledby="post-773016021" aria-describedby="post-status-773016021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/773016" data-action="post-title" > <span class="action-icons answered" data-tour="solved"> <!-- Answered --> </span> <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">Create an SecIdentityRef from a certificate and private key</span></a> </div> <div> <div class="excerpt "> Hi, I am working on a react native module used for tis connection and I am trying to implement the possibility to use a custom certificate/Private key. I have already implemented on android but on iOS I am getting hard times, we cannot find lots of resources, api is different on macOS and iOS with subtle differences so after having tested SO, chatgpt, ... I am trying here: I even tried to use an internal api since it seems ffmpeg uses it but with no success. I have attached my current code because it does not fit here. to sump up after having inserted cert and private key I try to get a SecIdentityRef but it fails. I assume that it's not enough to simply add certain and private key... // Query for the identity with correct attributes NSDictionary *identityQuery = @{ (__bridge id)kSecClass: (__bridge id)kSecClassIdentity, (__bridge id)kSecMatchLimit: (__bridge id)kSecMatchLimitOne, (__bridge id)kSecReturnRef: @YES, (__bridge id)kSecReturnData: @YES, (__bridge id)kSecAttrLabel: @"My Certificate", //(__bridge id)kSecUseDataProtectionKeychain: @YES }; SecIdentityRef identity = NULL; status = SecItemCopyMatching((__bridge CFDictionaryRef)identityQuery, (CFTypeRef *)&identity); TcpSocketClient.txt SecItemCopyMatching with kSecClassIdentity fails, SecIdentityCreate return NULL... So please help and indicates what I am doing wrong and how I am supposed getting a SecIdentityRef. Thanks </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/ios" rel="tag"> iOS </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/iphone" rel="tag"> iPhone </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/privacy" rel="tag"> Privacy </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 20 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 456 </div> <div class="mobile-icon timestamp" role="cell"> 1w </div> </div> </article> <article class="article-entry " role="article" value="772861021" aria-labelledby="post-772861021" aria-describedby="post-status-772861021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/772861" data-action="post-title" > <span class="action-icons answered" data-tour="solved"> <!-- Answered --> </span> <span class="underline">Does SecKeyCreateDecryptedData Ignore LATouchIDAuthenticationMaximumAllowableReuseDuration?</span></a> </div> <div> <div class="excerpt "> Hi everyone, I’m working on an iOS app that uses biometric authentication to access secure keychain items and private keys stored in the Secure Enclave with some data encryption/decryption with those keys. My goal is to minimize the number of biometric prompts by reusing the authentication result within a short time window. I have the following setup: When writing the biometry-restricted keychain items and Secure Enclave keys, I use LAContext with the property LATouchIDAuthenticationMaximumAllowableReuseDuration = 1 minute, and I pass this context as the kSecUseAuthenticationContext field in the query. When retrieving these items later (in a synchronous sequence upon app launch), I pass the same instance of LAContext as the kSecUseAuthenticationContext field. The issue: If I unlock my device and the biometric reuse time has not expired (i.e., less than 1 minute), the first two actions (keychain item retrieval and Secure Enclave key retrieval) do not prompt for Face ID. However, when I attempt to decrypt data with the private key using SecKeyCreateDecryptedData, I’m prompted for Face ID even if the biometric reuse time is still valid. If the biometric reuse time has expired (more than 1 minute since last authentication), I get prompted for Face ID on the first action (keychain retrieval), and subsequent actions (including data decryption) reuse that biometric result. Question: Does this behavior mean that SecKeyCreateDecryptedData ignore the LATouchIDAuthenticationMaximumAllowableReuseDuration property of LAContext, causing an additional biometric prompt during decryption with the private key? Or is there another reason for this behavior? Is there a way to make the biometric result reusable across all these actions, including decryption? Thank you! </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/localauthentication" rel="tag"> Local Authentication </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 293 </div> <div class="mobile-icon timestamp" role="cell"> 4w </div> </div> </article> <article class="article-entry " role="article" value="772843021" aria-labelledby="post-772843021" aria-describedby="post-status-772843021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/772843" data-action="post-title" > <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">Understanding Keychain Errors in Mobile Banking App</span></a> </div> <div> <div class="excerpt "> Hi, We use the iOS Keychain in our mobile app to securely store and retrieve data, which is tightly coupled with the initialization of some app features within the application. This issue is encountered during app launch We retrieve during Splash Screen UI controller at viewDidApper() The logic we use to access the Keychain is as follows: NSDate *NSDate_CD; NSString *account = [NSString stringWithUTF8String:@"SOME_KEY_ACCOUNT"]; NSString *attrgen = [NSString stringWithUTF8String:@"SOME_KEY"]; NSMutableDictionary *query = [[NSMutableDictionary alloc] init]; [query setObject:(__bridge id)(kSecClassGenericPassword) forKey:(__bridge id&lt;NSCopying&gt;)(kSecClass)]; [query setObject:attrgen forKey:(__bridge id&lt;NSCopying&gt;)(kSecAttrGeneric)]; [query setObject:(__bridge id)(kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly) forKey:(__bridge id&lt;NSCopying&gt;)(kSecAttrAccessible)]; [query setObject: [NSBundle mainBundle].bundleIdentifier forKey:(__bridge id&lt;NSCopying&gt;)(kSecAttrService)]; [query setObject:account forKey:(__bridge id&lt;NSCopying&gt;)(kSecAttrAccount)]; [query setObject:@YES forKey:(__bridge id&lt;NSCopying&gt;)(kSecReturnAttributes)]; [query setObject:@YES forKey:(__bridge id&lt;NSCopying&gt;)(kSecReturnData)]; CFDictionaryRef valueAttributes = NULL; OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&amp;valueAttributes); NSDictionary *attributes = (__bridge_transfer NSDictionary *)valueAttributes; if(status==errSecSuccess) { NSDate_CD = [attributes objectForKey:(__bridge id)kSecAttrCreationDate]; } else { NSLog(@"Key chain query failed"); } However, some users have reported intermittent failures during app launch. Upon investigation, we discovered that these failures are caused by exceptions thrown by the iOS Keychain, which the app is currently not handling. Unfortunately, we do not log the exception or the Keychain error code in the app logs at the moment, but we plan to implement this logging feature in the near future. For now, we are trying to better understand the nature of these errors. Could you help clarify the following Keychain errors, which might be encountered from the code above? errSecServiceNotAvailable (-25307) errSecAllocate (-108) errSecNotAvailable (-25291) If these errors are encountered, are they typically persistent or are they temporary states that could resolve on their own? Your insights would be greatly appreciated. Thank you. </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/ios" rel="tag"> iOS </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 1 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 295 </div> <div class="mobile-icon timestamp" role="cell"> 4w </div> </div> </article> <article class="article-entry " role="article" value="772408021" aria-labelledby="post-772408021" aria-describedby="post-status-772408021" data-action="content-list-article" > <div class="article-summary" role="cell" > <div class="article-summary-header"> <div class="article-summary-title"> <a class="post-title no-underline" href="/forums/thread/772408" data-action="post-title" > <span class="action-icons apple-recommended" data-tour="apple-recommended"> <!-- Recommended --> </span> <span class="underline">Unlock login keychain otherthan passwords</span></a> </div> <div> <div class="excerpt "> Is there a way to unlock login keychain without using password and with any other authentication factor supported by 3rd party MFA options? </div> </div> </div> <div class="chiclets"> <span data-tour="topic-subtopic-container"> <a class="topic topic-kind" data-action="topic" href="/forums/topics/privacy-and-security" style="--chiclet-background-color: #C8344B;--chiclet-color: #7F0022;" > Privacy & Security </a> <a class="subtopic topic-kind" data-action="subtopic" href="/forums/topics/privacy-and-security/privacy-and-security-general" style="--chiclet-background-color: #C8344B4D;--chiclet-color: #7F0022;" > General </a> </span> <a class="tag " data-cy="tagTitle" href="/forums/tags/security" rel="tag"> Security </a> <a class="tag " data-cy="tagTitle" href="/forums/tags/securityinterface" rel="tag"> Security Interface </a> </div> </div> <div class="article-stats "> <div class="mobile-icon replies" role="cell"> 3 </div> <div class="mobile-icon votes" role="cell"> 0 </div> <div class="mobile-icon views" role="cell"> 319 </div> <div class="mobile-icon timestamp" role="cell"> Jan ’25 </div> </div> </article> </div> </div> <nav class="pagination" data-action="pagination" role="navigation" aria-label="Pagination" data-current-page="1" data-total-pages="10"> <ol class="pagination-list first-btn-margin prev-btn-margin no-last-btn-margin" role="presentation"> <li> <a class="first-page button button-block button-neutral button-margin button-reduced hidden" href="/forums/tags/security/?sortBy=newest" aria-label="First page" data-action="pagination-button"> First </a> </li> <li> <a class="previous-page button button-block button-neutral button-margin button-reduced hidden" href="" aria-label="Previous page" data-action="pagination-button"> <span class="icon icon-standalone icon-chevronleft"></span> </a> </li> <li> <span class="page-number" role="text" data-action="pagination-page-number-text"> Page 1 </span> </li> <li> <a class="next-page button button-block button-neutral button-margin button-reduced" data-action="pagination-button" href="?page=2&sortBy=newest" aria-label="Next page"> <span class="icon icon-standalone icon-chevronright"></span> </a> </li> </ol> </nav> </section> </main> <script src="https://developer.apple.com/forums/public/compiled/pages/tag.js" type="text/javascript" defer></script> </div> <footer id="footer" class="footer" role="contentinfo" aria-labelledby="footer-label"> <div class="footer-content"> <h2 class="footer-label" id="footer-label">Developer Footer</h2> <div class="disclaimer">This site contains user submitted content, comments and opinions and is for informational purposes only. Apple disclaims any and all liability for the acts, omissions and conduct of any third parties in connection with or related to your use of the site. All postings and use of the content on this site are subject to the <a class="disclaimer-link" href="https://developer.apple.com/terms/apple-developer-forums/Apple-Developer-Forums-Participation-Agreement-20200618.pdf" target="_blank" aria-label="Apple Developer Forums Participation Agreement (Opens in new window)">Apple Developer Forums Participation Agreement</a> and Apple provided code is subject to the <a href="https://developer.apple.com/support/downloads/terms/apple-sample-code/Apple-Sample-Code-License.pdf" target="_blank" aria-label="Apple Sample Code License">Apple Sample Code License</a>.</div> <developer-breadcrumbs> <li>Forums</li> </developer-breadcrumbs> <nav class="footer-directory" aria-label="Apple Developer Directory" role="navigation"> <!--googleoff: all--> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-platform" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-platform"> <h3 class="footer-directory-column-section-title">Platforms</h3> </label> <a href="#footer-directory-column-section-state-platform" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/ios/">iOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/ipados/">iPadOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/macos/">macOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/tvos/">tvOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/watchos/">watchOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/visionos/">visionOS</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-tools" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-tools"> <h3 class="footer-directory-column-section-title">Tools</h3> </label> <a href="#footer-directory-column-section-state-tools" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/swift/">Swift</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/swiftui/">SwiftUI</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/sf-symbols/">SF Symbols</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/swift-playground/">Swift Playground</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/testflight/">TestFlight</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/xcode/">Xcode</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/xcode-cloud/">Xcode Cloud</a></li> </ul> </div> </div> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-topics" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-topics"> <h3 class="footer-directory-column-section-title">Topics & Technologies</h3> </label> <a href="#footer-directory-column-section-state-topics" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/accessibility/">Accessibility</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/accessories/">Accessories</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/app-extensions/">App Extensions</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/app-store/">App Store</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/audio/">Audio & Video</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/augmented-reality/">Augmented Reality</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/design/">Design</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/distribute/">Distribution</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/education/">Education</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/fonts/">Fonts</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/games/">Games</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/health-fitness/">Health & Fitness</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/in-app-purchase/">In-App Purchase</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/localization/">Localization</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/maps/">Maps & Location</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/machine-learning/">Machine Learning</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://opensource.apple.com">Open Source</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/security/">Security</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/safari/">Safari & Web</a></li> </ul> </div> </div> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-resources" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-resources"> <h3 class="footer-directory-column-section-title">Resources</h3> </label> <a href="#footer-directory-column-section-state-resources" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/documentation/">Documentation</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/learn/">Tutorials</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/download/">Downloads</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/forums/">Forums</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/videos/">Videos</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-support" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-support"> <h3 class="footer-directory-column-section-title">Support</h3> </label> <a href="#footer-directory-column-section-state-support" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/support/articles/">Support Articles</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/contact/">Contact Us</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/bug-reporting/">Bug Reporting</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/system-status/">System Status</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-account" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-account"> <h3 class="footer-directory-column-section-title">Account</h3> </label> <a href="#footer-directory-column-section-state-account" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/account/">Apple Developer</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://appstoreconnect.apple.com/">App Store Connect</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/account/ios/certificate/">Certificates, IDs, & Profiles</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://feedbackassistant.apple.com/">Feedback Assistant</a></li> </ul> </div> </div> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-programs" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-programs"> <h3 class="footer-directory-column-section-title">Programs</h3> </label> <a href="#footer-directory-column-section-state-programs" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/programs/">Apple Developer Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/programs/enterprise/">Apple Developer Enterprise Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/app-store/small-business-program/">App Store Small Business Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://mfi.apple.com/">MFi Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/programs/news-partner/">News Partner Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/programs/video-partner/">Video Partner Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/security-bounty/">Security Bounty Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/programs/security-research-device/">Security Research Device Program</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-events" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-events"> <h3 class="footer-directory-column-section-title">Events</h3> </label> <a href="#footer-directory-column-section-state-events" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/events/">Meet with Apple</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/events/developer-centers/">Apple Developer Centers</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/app-store/app-store-awards/">App Store Awards</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/design/awards/">Apple Design Awards</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/learn/experts/#academies">Apple Developer Academies</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://developer.apple.com/wwdc/">WWDC</a></li> </ul> </div> </div> <!--googleon: all--> </nav> <section class="footer-mini"> <div class="footer-mini-news">To view the latest developer news, visit <a href="https://developer.apple.com/news/">News and Updates</a>.</div> <div class="footer-mini-legal"> <div class="footer-mini-legal-copyright">Copyright © <script>document.write(new Date().getFullYear());</script> Apple Inc. All rights reserved.</div> <div class="footer-mini-legal-links"> <a class="footer-mini-legal-link" href="https://www.apple.com/legal/internet-services/terms/site.html">Terms of Use</a> <a class="footer-mini-legal-link" href="https://www.apple.com/legal/privacy/en-ww/">Privacy Policy</a> <a class="footer-mini-legal-link" href="https://developer.apple.com/terms/">License Agreements</a> </div> </div> </section> </div> </footer> <script> var _store = { 'lang': 'en', 'locale': 'en-US', 'basePath': '/forums', 'cdnPrefix': 'https://developer.apple.com/forums', 'ipIdentifierPrefix': 'https://developer.apple.com/forums', 'token': 'anonymous', 'mapKitToken': '', 'user': { 'fullName': '', 'loggedIn': '', 'userId': '', 'nickname': '', 'role': 'regular' , 'registrationCompleted': false, 'tutorialVisited': false, 'isAppleEmployee': false, 'hasInternalTagsAccess': false, 'hasAssignmentsAccess': false, 'isSubCommunity': false, }, 'testflightLinkError': '', '_config': { "ui.profile.preferences.show.browserStatus": 'true' ,"ui.subNav.corporateLoginEnabled": 'true' ,'ui.subNav.corporateLoginPath': '/ilogin' ,"ui.mapKitJS.scriptURL": 'https://cdn.apple-mapkit.com/mk/5.x.x/mapkit.js' ,"ui.mapKitJS.token": 'TOKEN' ,"ui.search.filters.sortBy.relevancy.urlParamValue": 'relevance' ,"ui.search.filters.sortBy.newestFirst.urlParamValue": 'newest' ,"ui.search.filters.sortBy.lastUpdated.urlParamValue": 'lastUpdated' ,"ui.search.filters.sortBy.oldestFirst.urlParamValue": 'oldest' ,"ui.post.body.urlAllowList": 'apple.com,stackoverflow.com,swift.org,example.com,gc.apple.com,static.gc.apple.com,knowledge.digicert.com,github.com,digicert.com,openradar.me,icloud.com,webkit.org,wikipedia.org,ietf.org,developer.mozilla.org,researchandcare.org,apple.github.io,readme.io,box.com,unity3d.com,unrealengine.com,gitlab.com,whatwg.org,w3.org,wikiquote.org,fidoalliance.org,sniadeveloper.org,swiftpackageindex.com,swiftdoc.org,sectigo.com' ,"ui.post.body.profileBaseUrl": 'https://developer.apple.com/forums/profile/' ,"ui.featureFlag.codeHighlight.enableTable": 'true' ,"ui.search.filters.sortBy.urlParamName": 'sortBy' ,"ui.search.filters.filterBy.urlParamName": 'filterBy' ,"ui.subNav.search.liveErrorValidation": 'false' ,"ui.threadPage.voting.allowRemoveSolved": 'false' ,"ui.common.maxAuthorEditTime": '3600000' ,"ui.featureFlag.content.convertPlainText2Url": 'true' ,"ui.featureFlag.content.convertFeedbackAssistantToUrls": 'true' ,"ui.featureFlag.content.enableEmoticons": 'false' ,"ui.featureFlag.content.enableEmojis": 'true' ,"ui.featureFlag.content.enableImagePreview": 'false' ,"ui.featureFlag.content.enableUserMentions": 'true' ,"ui.featureFlag.createPost.mentions": 'true' ,"ui.featureFlag.productTour.externalUser.enabled": 'false' ,"ui.featureFlag.productTour.internalUser.enabled": 'true' ,"ui.featureFlag.productTour.internalUser.tourSkippable": 'false' ,"ui.featureFlag.productTour.anonymousUser.enabled": 'false' ,"ui.featureFlag.verticalReplyNavigator.enabled": 'true' ,"ui.featureFlag.horizontalReplyNavigator.enabled": 'true' ,"ui.featureFlag.replyNavigator.hasMoreThanOnePageOfReplies.enabled": 'true' ,"ui.featureFlag.myAssignments.rssFeed.enabled": 'false' ,"ui.neighbor.url": 'https://supportmetrics.apple.com/content/services/stats' ,"ui.featureFlag.show.AdpMember.enabled": 'true' // User mentions ,"ui.createPost.mentionList": [ ] }, '_i18n': { // popup 'common.popup.close': 'Close dialog' ,'welcome.modal.title': 'Welcome to the all-new Apple Developer Forums!' ,'welcome.modal.external.description': 'New features now make it even easier to keep track of activity, search for content, post replies, and more. We’ve prepared a short tour to help get you started.' ,'welcome.modal.external.button': 'Explore what’s new' ,'welcome.modal.skipForNow': 'Skip for now' ,'registration.modal.title': 'Congratulations!' ,'registration.modal.internal.title': 'Your corporate account is set up.' ,'registration.modal.internal.description1': 'New admin features now make it easier for you to engage with developers, search and follow content areas, manage workflow and replies, keep track of activity, and more.' ,'registration.modal.internal.description2': 'Complete the forums basic training and tour to proceed.' ,'registration.modal.button': 'Start' // a11y ,'common.dropdown.a11y.contentLoading': 'Content Loading' // title postfix ,'common.titlePostfix': 'Apple Developer Forums' // Timestamps ,'common.timestamp.justNow': 'less than a minute' ,'common.timestamp.minuteAgo': '1 minute' ,'common.timestamp.minutesAgo': '{0} minutes' ,'common.timestamp.hourAgo': '1 hour' ,'common.timestamp.hoursAgo': '{0} hours' ,'common.timestamp.dayAgo': '1 day' ,'common.timestamp.daysAgo': '{0} days' ,'common.timestamp.weekAgo': '1 week' ,'common.timestamp.weeksAgo': '{0} weeks' ,'common.timestamp.monthAgo': '1 month' ,'common.timestamp.monthsAgo': '{0} months' ,'common.timestamp.yearAgo': '1 year' ,'common.timestamp.yearsAgo': '{0} years' ,'common.timestamp.ago': '{0} ago' ,'common.short.timestamp.justNow': 'Now' ,'common.short.timestamp.minutesAgo': '{0}m' ,'common.short.timestamp.hoursAgo': '{0}h' ,'common.short.timestamp.daysAgo': '{0}d' ,'common.short.timestamp.weeksAgo': '{0}w' // Pagination ,'common.pagination.page': 'Page {0}' ,'common.pagination.pageOf': 'Page {0} of {1}' ,'common.pagination.pageOfMobile': 'Page {0}/{1}' ,"common.nav.signIn.corporate": 'Sign in corporate' // Post Creation ,"createPost.select.a11y": 'createPost.select.a11y' ,"createPost.notification.text": 'We saved the content from your last session.' ,"createPost.notification.link": 'Continue this post where you left off.' ,"search.query.invalid.empty": 'Please enter your search query' ,"common.search.placeholder": 'Search by keywords or tags' // Registration ,"signup.username.blocked.n.profanity.words": 'You have included content in your nickname that is not permitted.' ,"signup.username.blocked.words": 'You have included content in your nickname that is not permitted.' ,"signup.username.maxLength.invalid": 'Usernames must be between 3 and 36 characters in length.' ,"signup.username.minLength.invalid": 'Usernames must be between 3 and 36 characters in length.' ,"signup.username.invalid.characters": 'Usernames must contain at least one alphanumeric character and may only contain numerals, upper or lower case Roman letters, dash (-), and underscore (_).' ,"signup.username.taken": 'This username already exists.' ,"signup.username.space": 'Usernames must contain at least one alphanumeric character and may only contain numerals, upper or lower case Roman letters, dash (-), and underscore (_).' ,"thread.author.adpMemberInfo": 'Dev ID: {0}' ,"thread.author.showAdpMemberInfo.button": 'Show Dev ID' // Error codes ,"error.accessDenied.pageTitle": 'Error - Access Denied' ,"error.accessDenied.header": 'Content not found' ,"error.accessDenied.message": 'This content does not exist.' ,"error.unAuthorized.pageTitle": 'Error - Unauthorized' ,"error.unAuthorized.header": 'Unauthorized' ,"error.unAuthorized.message": 'Access to this place or content is restricted. If you think this is a mistake, please contact your administrator or the person who directed you here.' ,"error.footer": '<p class="extra-message">Please visit the main page of <a href="/forums/">Apple Developer Forums</a> for links to discussion areas.</p>' ,"common.error.serviceDown": 'We encountered an error while loading this data. Please try again later.' ,"common.error.componentAjaxFailed": 'An error occurred while loading this information. Please reload the page or try again later.' ,"common.error.pageAjaxFailed": 'An error occurred while loading this page. Please reload the page or try again later.' // Create Post ,"tags.a11y.options.totally": 'Number of available tags is {0}' ,"tags.a11y.options.select": '{0} is selected' ,"tags.a11y.options.remove": '{0} is removed' }, i18n: function(key) { if (key === 'all') return this._i18n; else if (this._i18n[key]) return this._i18n[key]; return key; }, config: function(key) { if (key === 'all') return this._config; else if (this._config[key]) return this._config[key]; return key; } }; </script> <script> // minified version of above function decodeHtml(t){let o={"&":"&","<":"<",">":">",""":'"',"'":"'","#x27;":"'","#x2F;":"/"};return t.replace(/&|<|>|"|'/g,function(t){return o[t]})}var topicsJsonStr="[{\"id\":\"1179020\",\"title\":\"Accessibility & Inclusion\",\"name\":\"Accessibility & Inclusion\",\"slug\":\"accessibility-and-inclusion\",\"description\":\"Explore best practices for creating inclusive apps for users of Apple accessibility features and users from diverse backgrounds.\",\"url\":\"\/topics\/accessibility-and-inclusion\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/accessibility-and-inclusion\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#3495F2\",\"foregroundColor\":\"#003992\",\"children\":[{\"id\":\"1181020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"accessibility-and-inclusion-general\",\"description\":\"Explore best practices for creating inclusive apps that cater to users with diverse abilities\",\"url\":\"\/topics\/accessibility-and-inclusion\/accessibility-and-inclusion-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/accessibility\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/accessibility\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/accessibility\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/accessibility\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/accessibility-and-inclusion\/accessibility-and-inclusion-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#3495F24D\",\"foregroundColor\":\"#003992\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1183020\",\"title\":\"App & System Services\",\"name\":\"App & System Services\",\"slug\":\"app-and-system-services\",\"description\":\"Delve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.\",\"url\":\"\/topics\/app-and-system-services\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC893\",\"foregroundColor\":\"#A74300\",\"children\":[{\"id\":\"1189020\",\"title\":\"Drivers\",\"name\":\"Drivers\",\"slug\":\"app-and-system-services-drivers\",\"description\":\"Understand the role of drivers in bridging the gap between software and hardware, ensuring smooth hardware functionality.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-drivers\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/drivers.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/drivers.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/drivers.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/drivers.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-drivers\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1197020\",\"title\":\"Processes & Concurrency\",\"name\":\"Processes & Concurrency\",\"slug\":\"processes-and-concurrency\",\"description\":\"Discover how the operating system manages multiple applications and processes simultaneously, ensuring smooth multitasking performance.\",\"url\":\"\/topics\/app-and-system-services\/processes-and-concurrency\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/processes%26concurrency.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/processes%26concurrency.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/processes%26concurrency.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/processes%26concurrency.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/processes-and-concurrency\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1199020\",\"title\":\"iCloud & Data\",\"name\":\"iCloud & Data\",\"slug\":\"app-and-system-services-icloud-and-data\",\"description\":\"Learn how to integrate your app with iCloud and data frameworks for effective data storage\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-icloud-and-data\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/icloud%26data.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/icloud%26data.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/icloud%26data.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/icloud%26data.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-icloud-and-data\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1203020\",\"title\":\"Maps & Location\",\"name\":\"Maps & Location\",\"slug\":\"app-and-system-services-maps-and-location\",\"description\":\"Learn how to integrate MapKit and Core Location to unlock the power of location-based features in your app.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-maps-and-location\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/maps%26location.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/maps%26location.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/maps%26location.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/maps%26location.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-maps-and-location\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1205020\",\"title\":\"Notifications\",\"name\":\"Notifications\",\"slug\":\"app-and-system-services-notifications\",\"description\":\"Learn about the technical aspects of notification delivery on device, including notification types, priorities, and notification center management.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-notifications\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/notifications.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/notifications.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/notifications.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/notifications.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-notifications\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1185020\",\"title\":\"Automation & Scripting\",\"name\":\"Automation & Scripting\",\"slug\":\"automation-and-scripting\",\"description\":\"Learn about scripting languages and automation frameworks available on the platform to automate repetitive tasks.\",\"url\":\"\/topics\/app-and-system-services\/automation-and-scripting\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/automation%26scripting.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/automation%26scripting.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/automation%26scripting.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/automation%26scripting.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/automation-and-scripting\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1187020\",\"title\":\"Core OS\",\"name\":\"Core OS\",\"slug\":\"app-and-system-services-core-os\",\"description\":\"Explore the core architecture of the operating system, including the kernel, memory management, and process scheduling.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-core-os\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/coreos.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/coreos.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/coreos.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/coreos.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-core-os\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1191020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"app-and-system-services-general\",\"description\":\"Delve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1193020\",\"title\":\"Hardware\",\"name\":\"Hardware\",\"slug\":\"app-and-system-services-hardware\",\"description\":\"Delve into the physical components of Apple devices, including processors, memory, storage, and their interaction with the software.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-hardware\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/hardware.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/hardware.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/hardware.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/hardware.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-hardware\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1195020\",\"title\":\"Networking\",\"name\":\"Networking\",\"slug\":\"app-and-system-services-networking\",\"description\":\"Explore the networking protocols and technologies used by the device to connect to Wi-Fi networks, Bluetooth devices, and cellular data services.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-networking\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/networking.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/networking.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/networking.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/networking.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-networking\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1201020\",\"title\":\"Health & Fitness\",\"name\":\"Health & Fitness\",\"slug\":\"app-and-system-services-health-and-fitness\",\"description\":\"Explore the technical aspects of health and fitness features, including sensor data acquisition, health data processing, and integration with the HealthKit framework.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-health-and-fitness\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/health%26fitness.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/health%26fitness.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/health%26fitness.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/health%26fitness.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-health-and-fitness\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1207020\",\"title\":\"StoreKit\",\"name\":\"StoreKit\",\"slug\":\"app-and-system-services-storekit\",\"description\":\"Support in-app purchases and interactions with the App Store using StoreKit.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-storekit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/storekit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/storekit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/storekit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/storekit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-storekit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1209020\",\"title\":\"Apple Pay\",\"name\":\"Apple Pay\",\"slug\":\"app-and-system-services-apple-pay\",\"description\":\"Discuss how to integrate Apple Pay into your app for secure and convenient payments.\",\"url\":\"\/topics\/app-and-system-services\/app-and-system-services-apple-pay\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/applepay.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/applepay.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/applepay.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/app%26systemservices\/applepay.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-and-system-services\/app-and-system-services-apple-pay\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FAC8934D\",\"foregroundColor\":\"#A74300\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1211020\",\"title\":\"App Store Distribution & Marketing\",\"name\":\"App Store Distribution & Marketing\",\"slug\":\"app-store-distribution-and-marketing\",\"description\":\"Navigate the App Store landscape. Share strategies for app submission, distribution, marketing, and user acquisition. Discuss best practices for getting your app discovered and downloaded.\",\"url\":\"\/topics\/app-store-distribution-and-marketing\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/app-store-distribution-and-marketing\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#A1D360\",\"foregroundColor\":\"#266910\",\"children\":[{\"id\":\"1215020\",\"title\":\"TestFlight\",\"name\":\"TestFlight\",\"slug\":\"app-store-distribution-and-marketing-testflight\",\"description\":\"Use TestFlight in App Store Connect to invite and manage beta testers for iOS, iPadOS, tvOS, and watchOS apps. Discuss questions here and share app builds publicly via TestFlight under the Community topic.\",\"url\":\"\/topics\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-testflight\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/testflight.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/testflight.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/testflight.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/testflight.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-testflight\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#A1D3604D\",\"foregroundColor\":\"#266910\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1219020\",\"title\":\"App Store Connect API\",\"name\":\"App Store Connect API\",\"slug\":\"app-store-distribution-and-marketing-app-store-connect-api\",\"description\":\"The App Store Connect API helps you automate tasks usually done on the Apple Developer website and App Store Connect.\",\"url\":\"\/topics\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-app-store-connect-api\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnectapi.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnectapi.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnectapi.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnectapi.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-app-store-connect-api\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#A1D3604D\",\"foregroundColor\":\"#266910\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1221020\",\"title\":\"App Review\",\"name\":\"App Review\",\"slug\":\"app-store-distribution-and-marketing-app-review\",\"description\":\"Understand the technical and content review process for submitting apps to the App Store.\",\"url\":\"\/topics\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-app-review\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appreview.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appreview.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appreview.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appreview.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-app-review\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#A1D3604D\",\"foregroundColor\":\"#266910\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1213020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"app-store-distribution-and-marketing-general\",\"description\":\"Navigate the App Store landscape. Share strategies for app submission, distribution, marketing, and user acquisition. Discuss best practices for getting your app discovered and downloaded.\",\"url\":\"\/topics\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#A1D3604D\",\"foregroundColor\":\"#266910\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1217020\",\"title\":\"App Store Connect\",\"name\":\"App Store Connect\",\"slug\":\"app-store-distribution-and-marketing-app-store-connect\",\"description\":\"App Store Connect is a suite of tools for submitting and managing your apps and in-app purchases on the App Store.\",\"url\":\"\/topics\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-app-store-connect\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnect.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnect.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnect.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/appstore%26marketing\/appstoreconnect.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/app-store-distribution-and-marketing\/app-store-distribution-and-marketing-app-store-connect\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#A1D3604D\",\"foregroundColor\":\"#266910\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1223020\",\"title\":\"Business & Education\",\"name\":\"Business & Education\",\"slug\":\"business-and-education-topic\",\"description\":\"Explore the intersection of business and app development. Discuss topics like device management, education, and resources for aspiring app developers.\",\"url\":\"\/topics\/business-and-education-topic\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/business-and-education-topic\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FBD643\",\"foregroundColor\":\"#B25000\",\"children\":[{\"id\":\"1225020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"business-and-education-topic-general\",\"description\":\"Explore the intersection of business and app development. Discuss topics like device management, education, and resources for aspiring app developers.\",\"url\":\"\/topics\/business-and-education-topic\/business-and-education-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/business%26education\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/business%26education\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/business%26education\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/business%26education\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/business-and-education-topic\/business-and-education-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FBD6434D\",\"foregroundColor\":\"#B25000\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1227020\",\"title\":\"Device Management\",\"name\":\"Device Management\",\"slug\":\"business-and-education-topic-device-management\",\"description\":\"Allow administrators to securely and remotely configure enrolled devices using Device Management.\",\"url\":\"\/topics\/business-and-education-topic\/business-and-education-topic-device-management\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/business%26education\/devicemanagement.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/business%26education\/devicemanagement.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/business%26education\/devicemanagement.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/business%26education\/devicemanagement.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/business-and-education-topic\/business-and-education-topic-device-management\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#FBD6434D\",\"foregroundColor\":\"#B25000\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1229020\",\"title\":\"Code Signing\",\"name\":\"Code Signing\",\"slug\":\"code-signing-topic\",\"description\":\"Demystify code signing and its importance in app development. Get help troubleshooting code signing issues and ensure your app is properly signed for distribution.\",\"url\":\"\/topics\/code-signing-topic\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/code-signing-topic\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#BD93FA\",\"foregroundColor\":\"#4300B0\",\"children\":[{\"id\":\"1231020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"code-signing-topic-general\",\"description\":\"Demystify code signing and its importance in app development. Get help troubleshooting code signing issues and ensure your app is properly signed for distribution.\",\"url\":\"\/topics\/code-signing-topic\/code-signing-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/codesigning\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/codesigning\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/codesigning\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/codesigning\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/code-signing-topic\/code-signing-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#BD93FA4D\",\"foregroundColor\":\"#4300B0\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1233020\",\"title\":\"Certificates, Identifiers & Profiles\",\"name\":\"Certificates, Identifiers & Profiles\",\"slug\":\"certificates-identifiers-and-profiles\",\"description\":\"Discuss the technical details of security certificates, identifiers, and profiles used by the OS to ensure validity of apps and services on device.\",\"url\":\"\/topics\/code-signing-topic\/certificates-identifiers-and-profiles\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/codesigning\/certificates.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/codesigning\/certificates.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/codesigning\/certificates.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/codesigning\/certificates.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/code-signing-topic\/certificates-identifiers-and-profiles\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#BD93FA4D\",\"foregroundColor\":\"#4300B0\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1235020\",\"title\":\"Entitlements\",\"name\":\"Entitlements\",\"slug\":\"code-signing-topic-entitlements\",\"description\":\"Entitlements allow specific capabilities or security permissions for your apps.\",\"url\":\"\/topics\/code-signing-topic\/code-signing-topic-entitlements\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/codesigning\/entitlements.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/codesigning\/entitlements.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/codesigning\/entitlements.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/codesigning\/entitlements.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/code-signing-topic\/code-signing-topic-entitlements\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#BD93FA4D\",\"foregroundColor\":\"#4300B0\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1237020\",\"title\":\"Notarization\",\"name\":\"Notarization\",\"slug\":\"code-signing-topic-notarization\",\"description\":\"Notarization is the process of scanning Developer ID-signed software for malicious components before distribution outside of the Mac App Store.\",\"url\":\"\/topics\/code-signing-topic\/code-signing-topic-notarization\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/codesigning\/notarization.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/codesigning\/notarization.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/codesigning\/notarization.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/codesigning\/notarization.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/code-signing-topic\/code-signing-topic-notarization\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#BD93FA4D\",\"foregroundColor\":\"#4300B0\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1239020\",\"title\":\"Community\",\"name\":\"Community\",\"slug\":\"community\",\"description\":\"This is a dedicated space for developers to connect, share ideas, collaborate, and ask questions. Introduce yourself, network with other developers, and join us in fostering a supportive community.\",\"url\":\"\/topics\/community\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/community\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#8CDDD5\",\"foregroundColor\":\"#006971\",\"children\":[{\"id\":\"1241020\",\"title\":\"Apple Developers\",\"name\":\"Apple Developers\",\"slug\":\"apple-developers\",\"description\":\"This is a dedicated space for developers to connect, share ideas, collaborate, and ask questions. Introduce yourself, network with other developers, and foster a supportive community.\",\"url\":\"\/topics\/community\/apple-developers\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/community\/apple-developers\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#8CDDD54D\",\"foregroundColor\":\"#006971\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1243020\",\"title\":\"Apple Arcade\",\"name\":\"Apple Arcade\",\"slug\":\"community-apple-arcade\",\"description\":\"Apple Arcade is a gaming subscription service on Mac, iOS, iPadOS, and tvOS devices. This is a continuation of a private access business partnerships membership group\",\"url\":\"\/topics\/community\/community-apple-arcade\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/community\/applearcade.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/community\/applearcade.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/community\/applearcade.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/community\/applearcade.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/community\/community-apple-arcade\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#8CDDD54D\",\"foregroundColor\":\"#006971\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1253020\",\"title\":\"Swift Student Challenge\",\"name\":\"Swift Student Challenge\",\"slug\":\"community-swift-student-challenge\",\"description\":\"Discuss Swift Student Challenge.\",\"url\":\"\/topics\/community\/community-swift-student-challenge\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/community\/appledevelopers.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/community\/community-swift-student-challenge\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#8CDDD54D\",\"foregroundColor\":\"#006971\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1255020\",\"title\":\"Developer Tools & Services\",\"name\":\"Developer Tools & Services\",\"slug\":\"developer-tools-and-services\",\"description\":\"Dive into the vast array of tools, services, and support available to developers.\",\"url\":\"\/topics\/developer-tools-and-services\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E1\",\"foregroundColor\":\"#31468E\",\"children\":[{\"id\":\"1261020\",\"title\":\"Swift Playground\",\"name\":\"Swift Playground\",\"slug\":\"developer-tools-and-services-swift-playground\",\"description\":\"Learn and explore coding in Swift through interactive learning experiences on the Swift Playground app for iPadOS and macOS.\",\"url\":\"\/topics\/developer-tools-and-services\/developer-tools-and-services-swift-playground\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/developertools%26services\/swiftplaygrounds.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/developertools%26services\/swiftplaygrounds.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/developertools%26services\/swiftplaygrounds.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/developertools%26services\/swiftplaygrounds.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\/developer-tools-and-services-swift-playground\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E14D\",\"foregroundColor\":\"#31468E\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1257020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"developer-tools-and-services-general\",\"description\":\"Dive into the vast array of tools and services available to developers.\",\"url\":\"\/topics\/developer-tools-and-services\/developer-tools-and-services-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/developertools%26services\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/developertools%26services\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/developertools%26services\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/developertools%26services\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\/developer-tools-and-services-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E14D\",\"foregroundColor\":\"#31468E\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1259020\",\"title\":\"Instruments\",\"name\":\"Instruments\",\"slug\":\"developer-tools-and-services-instruments\",\"description\":\"Instruments is a performance-analysis and testing tool for iOS, iPadOS, watchOS, tvOS, and macOS apps.\",\"url\":\"\/topics\/developer-tools-and-services\/developer-tools-and-services-instruments\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/developertools%26services\/instruments.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/developertools%26services\/instruments.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/developertools%26services\/instruments.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/developertools%26services\/instruments.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\/developer-tools-and-services-instruments\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E14D\",\"foregroundColor\":\"#31468E\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1263020\",\"title\":\"Xcode\",\"name\":\"Xcode\",\"slug\":\"developer-tools-and-services-xcode\",\"description\":\"Build, test, and submit your app using Xcode, Apple's integrated development environment.\",\"url\":\"\/topics\/developer-tools-and-services\/developer-tools-and-services-xcode\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcode.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcode.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcode.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcode.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\/developer-tools-and-services-xcode\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E14D\",\"foregroundColor\":\"#31468E\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1265020\",\"title\":\"Xcode Cloud\",\"name\":\"Xcode Cloud\",\"slug\":\"developer-tools-and-services-xcode-cloud\",\"description\":\"Automate workflows to test, analyze, build, and distribute your app, and integrate them with other developer tools, such as TestFlight and App Store Connect.\",\"url\":\"\/topics\/developer-tools-and-services\/developer-tools-and-services-xcode-cloud\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcodecloud.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcodecloud.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcodecloud.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/developertools%26services\/xcodecloud.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\/developer-tools-and-services-xcode-cloud\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E14D\",\"foregroundColor\":\"#31468E\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1267020\",\"title\":\"Developer Forums\",\"name\":\"Developer Forums\",\"slug\":\"developer-forums\",\"description\":\"Ask questions about how to use the Apple Developer Forums. Discuss forums bugs and enhancements requests that you\u2019ve filed via Feedback Assistant.\",\"url\":\"\/topics\/developer-tools-and-services\/developer-forums\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/developertools%26services\/developerforums.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/developertools%26services\/developerforums.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/developertools%26services\/developerforums.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/developertools%26services\/developerforums.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\/developer-forums\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E14D\",\"foregroundColor\":\"#31468E\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1269020\",\"title\":\"Apple Developer Program\",\"name\":\"Apple Developer Program\",\"slug\":\"apple-developer-program\",\"description\":\"Create and deliver software for users around the world on Apple platforms using the the tools, resources, and support included with Apple Developer Program membership.\",\"url\":\"\/topics\/developer-tools-and-services\/apple-developer-program\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/developertools%26services\/appledeveloperprogram.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/developertools%26services\/appledeveloperprogram.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/developertools%26services\/appledeveloperprogram.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/developertools%26services\/appledeveloperprogram.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/developer-tools-and-services\/apple-developer-program\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#92A4E14D\",\"foregroundColor\":\"#31468E\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1271020\",\"title\":\"Design\",\"name\":\"Design\",\"slug\":\"design-topic\",\"description\":\"Explore the art and science of app design. Discuss user interface (UI) design principles, user experience (UX) best practices, and share design resources and inspiration.\",\"url\":\"\/topics\/design-topic\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/design-topic\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#6C6C70\",\"foregroundColor\":\"#272727\",\"children\":[{\"id\":\"1273020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"design-topic-general\",\"description\":\"Explore the art and science of app design. Discuss user interface (UI) design principles, user experience (UX) best practices, and share design resources and inspiration.\",\"url\":\"\/topics\/design-topic\/design-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/design\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/design\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/design\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/design\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/design-topic\/design-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#6C6C704D\",\"foregroundColor\":\"#272727\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1275020\",\"title\":\"Graphics & Games\",\"name\":\"Graphics & Games\",\"slug\":\"graphics-and-games-topic\",\"description\":\"Delve into the world of graphics and game development. Discuss creating stunning visuals, optimizing game mechanics, and share resources for game developers.\",\"url\":\"\/topics\/graphics-and-games-topic\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB2\",\"foregroundColor\":\"#9E0058\",\"children\":[{\"id\":\"1356020\",\"title\":\"TabletopKit\",\"name\":\"TabletopKit\",\"slug\":\"tabletopkit\",\"description\":\"Build spatial, multiplayer experiences around a table with TabletopKit. Discuss questions here.\",\"url\":\"\/topics\/graphics-and-games-topic\/tabletopkit\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\/tabletopkit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB24D\",\"foregroundColor\":\"#9E0058\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1341020\",\"title\":\"RealityKit\",\"name\":\"RealityKit\",\"slug\":\"spatial-computing-realitykit\",\"description\":\"Simulate and render 3D content for use in your augmented reality apps using RealityKit.\",\"url\":\"\/topics\/graphics-and-games-topic\/spatial-computing-realitykit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitykit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitykit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitykit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitykit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\/spatial-computing-realitykit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB24D\",\"foregroundColor\":\"#9E0058\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1277020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"graphics-and-games-topic-general\",\"description\":\" Delve into the world of graphics and game development. Discuss creating stunning visuals, optimizing game mechanics, and share resources for game developers.\",\"url\":\"\/topics\/graphics-and-games-topic\/graphics-and-games-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/graphics%26games\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/graphics%26games\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/graphics%26games\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/graphics%26games\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\/graphics-and-games-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB24D\",\"foregroundColor\":\"#9E0058\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1279020\",\"title\":\"Metal\",\"name\":\"Metal\",\"slug\":\"graphics-and-games-topic-metal\",\"description\":\"Render advanced 3D graphics and perform data-parallel computations using graphics processors using Metal.\",\"url\":\"\/topics\/graphics-and-games-topic\/graphics-and-games-topic-metal\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/graphics%26games\/Metal.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/graphics%26games\/Metal.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/graphics%26games\/Metal.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/graphics%26games\/Metal.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\/graphics-and-games-topic-metal\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB24D\",\"foregroundColor\":\"#9E0058\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1281020\",\"title\":\"GameKit\",\"name\":\"GameKit\",\"slug\":\"graphics-and-games-topic-gamekit\",\"description\":\"Create apps that allow players to interact with each other using GameKit.\",\"url\":\"\/topics\/graphics-and-games-topic\/graphics-and-games-topic-gamekit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/graphics%26games\/gamekit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/graphics%26games\/gamekit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/graphics%26games\/gamekit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/graphics%26games\/gamekit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\/graphics-and-games-topic-gamekit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB24D\",\"foregroundColor\":\"#9E0058\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1283020\",\"title\":\"SceneKit\",\"name\":\"SceneKit\",\"slug\":\"graphics-and-games-topic-scenekit\",\"description\":\"Create 3D games and add 3D content to apps using high-level scene descriptions using SceneKit.\",\"url\":\"\/topics\/graphics-and-games-topic\/graphics-and-games-topic-scenekit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/graphics%26games\/scenekit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/graphics%26games\/scenekit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/graphics%26games\/scenekit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/graphics%26games\/scenekit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\/graphics-and-games-topic-scenekit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB24D\",\"foregroundColor\":\"#9E0058\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1285020\",\"title\":\"SpriteKit\",\"name\":\"SpriteKit\",\"slug\":\"graphics-and-games-topic-spritekit\",\"description\":\"Drawing shapes, particles, text, images, and video in two dimensions using SpriteKit.\",\"url\":\"\/topics\/graphics-and-games-topic\/graphics-and-games-topic-spritekit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/graphics%26games\/spritekit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/graphics%26games\/spritekit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/graphics%26games\/spritekit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/graphics%26games\/spritekit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/graphics-and-games-topic\/graphics-and-games-topic-spritekit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F76EB24D\",\"foregroundColor\":\"#9E0058\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1287020\",\"title\":\"Machine Learning & AI\",\"name\":\"Machine Learning & AI\",\"slug\":\"machine-learning-and-ai\",\"description\":\"Explore the power of machine learning and Apple Intelligence within apps. Discuss integrating features, share best practices, and explore the possibilities for your app here.\",\"url\":\"\/topics\/machine-learning-and-ai\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/machine-learning-and-ai\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#18C1C0\",\"foregroundColor\":\"#00686C\",\"children\":[{\"id\":\"1353020\",\"title\":\"Apple Intelligence\",\"name\":\"Apple Intelligence\",\"slug\":\"machine-learning-and-ai-topic-apple-intelligence\",\"description\":\"Apple Intelligence is the personal intelligence system that puts powerful generative models right at the core of your iPhone, iPad, and Mac and powers incredible new features to help users communicate, work, and express themselves.\",\"url\":\"\/topics\/machine-learning-and-ai\/machine-learning-and-ai-topic-apple-intelligence\",\"imgSrc\":{\"logo140\":\"https:\/\/cdsassets.apple.com\/live\/ABQLYM7Y\/wwdc_session_icons\/appleintelligence.svg\",\"logo70\":\"https:\/\/cdsassets.apple.com\/live\/ABQLYM7Y\/wwdc_session_icons\/appleintelligence.svg\",\"logo210\":\"https:\/\/cdsassets.apple.com\/live\/ABQLYM7Y\/wwdc_session_icons\/appleintelligence.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/machine-learning-and-ai\/machine-learning-and-ai-topic-apple-intelligence\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#18C1C04D\",\"foregroundColor\":\"#00686C\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1289020\",\"title\":\"Core ML\",\"name\":\"Core ML\",\"slug\":\"machine-learning-topic-core-ml\",\"description\":\"Integrate machine learning models into your app using Core ML.\",\"url\":\"\/topics\/machine-learning-and-ai\/machine-learning-topic-core-ml\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/machinelearning\/coreml.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/machinelearning\/coreml.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/machinelearning\/coreml.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/machinelearning\/coreml.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/machine-learning-and-ai\/machine-learning-topic-core-ml\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#18C1C04D\",\"foregroundColor\":\"#00686C\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1291020\",\"title\":\"Create ML\",\"name\":\"Create ML\",\"slug\":\"machine-learning-topic-create-ml\",\"description\":\"Create machine learning models for use in your app using Create ML.\",\"url\":\"\/topics\/machine-learning-and-ai\/machine-learning-topic-create-ml\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/machinelearning\/createml.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/machinelearning\/createml.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/machinelearning\/createml.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/machinelearning\/createml.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/machine-learning-and-ai\/machine-learning-topic-create-ml\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#18C1C04D\",\"foregroundColor\":\"#00686C\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1293020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"machine-learning-topic-general\",\"description\":\"Explore the power of machine learning within apps. Discuss integrating machine learning features, share best practices, and explore the possibilities for your app.\",\"url\":\"\/topics\/machine-learning-and-ai\/machine-learning-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/machinelearning\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/machinelearning\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/machinelearning\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/machinelearning\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/machine-learning-and-ai\/machine-learning-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#18C1C04D\",\"foregroundColor\":\"#00686C\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1295020\",\"title\":\"Media Technologies\",\"name\":\"Media Technologies\",\"slug\":\"media-technologies\",\"description\":\"Explore the integration of media technologies within your app. Discuss working with audio, video, camera, and other media functionalities.\",\"url\":\"\/topics\/media-technologies\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/media-technologies\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#00B576\",\"foregroundColor\":\"#005A37\",\"children\":[{\"id\":\"1297020\",\"title\":\"Audio\",\"name\":\"Audio\",\"slug\":\"media-technologies-audio\",\"description\":\"Dive into the technical aspects of audio on your device, including codecs, format support, and customization options.\",\"url\":\"\/topics\/media-technologies\/media-technologies-audio\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/audio.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/audio.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/audio.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/audio.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/media-technologies\/media-technologies-audio\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#00B5764D\",\"foregroundColor\":\"#005A37\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1299020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"media-technologies-general\",\"description\":\"Explore the integration of media technologies within your app. Discuss working with audio, video, camera, and other media functionalities.\",\"url\":\"\/topics\/media-technologies\/media-technologies-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/media-technologies\/media-technologies-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#00B5764D\",\"foregroundColor\":\"#005A37\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1301020\",\"title\":\"Photos & Camera\",\"name\":\"Photos & Camera\",\"slug\":\"photos-and-camera\",\"description\":\"Explore technical aspects of capturing high-quality photos and videos, including exposure control, focus modes, and RAW capture options.\",\"url\":\"\/topics\/media-technologies\/photos-and-camera\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/photos%26camera.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/photos%26camera.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/photos%26camera.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/photos%26camera.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/media-technologies\/photos-and-camera\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#00B5764D\",\"foregroundColor\":\"#005A37\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1303020\",\"title\":\"Streaming\",\"name\":\"Streaming\",\"slug\":\"streaming\",\"description\":\"Deep dive into the technical specifications that influence seamless playback for streaming services, including bitrates, codecs, and caching mechanisms.\",\"url\":\"\/topics\/media-technologies\/streaming\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/streaming.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/streaming.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/streaming.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/streaming.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/media-technologies\/streaming\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#00B5764D\",\"foregroundColor\":\"#005A37\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1305020\",\"title\":\"Video\",\"name\":\"Video\",\"slug\":\"media-technologies-video\",\"description\":\"Dive into the world of video on Apple platforms, exploring ways to integrate video functionalities within your iOS,iPadOS, macOS, tvOS, visionOS or watchOS app.\",\"url\":\"\/topics\/media-technologies\/media-technologies-video\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/video.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/video.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/video.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/mediatechnologies\/video.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/media-technologies\/media-technologies-video\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#00B5764D\",\"foregroundColor\":\"#005A37\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1307020\",\"title\":\"Privacy & Security\",\"name\":\"Privacy & Security\",\"slug\":\"privacy-and-security\",\"description\":\"Prioritize user privacy and data security in your app. Discuss best practices for data handling, user consent, and security measures to protect user information.\",\"url\":\"\/topics\/privacy-and-security\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/privacy-and-security\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#C8344B\",\"foregroundColor\":\"#7F0022\",\"children\":[{\"id\":\"1309020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"privacy-and-security-general\",\"description\":\"Prioritize user privacy and data security in your app. Discuss best practices for data handling, user consent, and security measures to protect user information.\",\"url\":\"\/topics\/privacy-and-security\/privacy-and-security-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/privacy%26security\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/privacy%26security\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/privacy%26security\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/privacy%26security\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/privacy-and-security\/privacy-and-security-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#C8344B4D\",\"foregroundColor\":\"#7F0022\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1311020\",\"title\":\"Programming Languages\",\"name\":\"Programming Languages\",\"slug\":\"programming-languages-topic\",\"description\":\"Dive into the world of programming languages used for app development.\",\"url\":\"\/topics\/programming-languages-topic\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/programming-languages-topic\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#97AC00\",\"foregroundColor\":\"#3F4200\",\"children\":[{\"id\":\"1317020\",\"title\":\"Swift\",\"name\":\"Swift\",\"slug\":\"programming-languages-topic-swift\",\"description\":\"Discuss Swift.\",\"url\":\"\/topics\/programming-languages-topic\/programming-languages-topic-swift\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/programminglanguages\/swift.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/programminglanguages\/swift.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/programminglanguages\/swift.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/programminglanguages\/swift.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/programming-languages-topic\/programming-languages-topic-swift\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#97AC004D\",\"foregroundColor\":\"#3F4200\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1313020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"programming-languages-topic-general\",\"description\":\"Dive into the world of programming languages used for app development.\",\"url\":\"\/topics\/programming-languages-topic\/programming-languages-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/programminglanguages\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/programminglanguages\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/programminglanguages\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/programminglanguages\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/programming-languages-topic\/programming-languages-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#97AC004D\",\"foregroundColor\":\"#3F4200\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1319020\",\"title\":\"UI Frameworks\",\"name\":\"UI Frameworks\",\"slug\":\"ui-frameworks-topic\",\"description\":\"Explore the various UI frameworks available for building app interfaces. Discuss the use cases for different frameworks, share best practices, and get help with specific framework-related questions.\",\"url\":\"\/topics\/ui-frameworks-topic\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/ui-frameworks-topic\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#71BDF9\",\"foregroundColor\":\"#0D5187\",\"children\":[{\"id\":\"1321020\",\"title\":\"SwiftUI\",\"name\":\"SwiftUI\",\"slug\":\"ui-frameworks-topic-swiftui\",\"description\":\"Provide views, controls, and layout structures for declaring your app's user interface using SwiftUI.\",\"url\":\"\/topics\/ui-frameworks-topic\/ui-frameworks-topic-swiftui\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/uiframeworks\/swiftui.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/uiframeworks\/swiftui.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/uiframeworks\/swiftui.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/uiframeworks\/swiftui.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/ui-frameworks-topic\/ui-frameworks-topic-swiftui\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#71BDF94D\",\"foregroundColor\":\"#0D5187\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1323020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"ui-frameworks-topic-general\",\"description\":\"Explore the various UI frameworks available for building app interfaces. Discuss the use cases for different frameworks, share best practices, and get help with specific framework-related questions.\",\"url\":\"\/topics\/ui-frameworks-topic\/ui-frameworks-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/uiframeworks\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/uiframeworks\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/uiframeworks\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/uiframeworks\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/ui-frameworks-topic\/ui-frameworks-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#71BDF94D\",\"foregroundColor\":\"#0D5187\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1325020\",\"title\":\"UIKit\",\"name\":\"UIKit\",\"slug\":\"ui-frameworks-topic-uikit\",\"description\":\"Construct and manage graphical, event-driven user interfaces for iOS or tvOS apps using UIKit.\",\"url\":\"\/topics\/ui-frameworks-topic\/ui-frameworks-topic-uikit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/uiframeworks\/uikit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/uiframeworks\/uikit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/uiframeworks\/uikit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/uiframeworks\/uikit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/ui-frameworks-topic\/ui-frameworks-topic-uikit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#71BDF94D\",\"foregroundColor\":\"#0D5187\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1327020\",\"title\":\"AppKit\",\"name\":\"AppKit\",\"slug\":\"ui-frameworks-topic-appkit\",\"description\":\"Construct and manage a graphical, event-driven user interface for your macOS app using AppKit.\",\"url\":\"\/topics\/ui-frameworks-topic\/ui-frameworks-topic-appkit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/uiframeworks\/appkit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/uiframeworks\/appkit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/uiframeworks\/appkit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/uiframeworks\/appkit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/ui-frameworks-topic\/ui-frameworks-topic-appkit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#71BDF94D\",\"foregroundColor\":\"#0D5187\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1329020\",\"title\":\"Safari & Web\",\"name\":\"Safari & Web\",\"slug\":\"safari-and-web-topic\",\"description\":\"Explore the integration of web technologies within your app. Discuss building web-based apps, leveraging Safari functionalities, and integrating with web services.\",\"url\":\"\/topics\/safari-and-web-topic\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/safari-and-web-topic\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#6262D9\",\"foregroundColor\":\"#1F1EA9\",\"children\":[{\"id\":\"1331020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"safari-and-web-topic-general\",\"description\":\"Explore the integration of web technologies within your app. Discuss building web-based apps, leveraging Safari functionalities, and integrating with web services.\",\"url\":\"\/topics\/safari-and-web-topic\/safari-and-web-topic-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/safari%26web\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/safari%26web\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/safari%26web\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/safari%26web\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/safari-and-web-topic\/safari-and-web-topic-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#6262D94D\",\"foregroundColor\":\"#1F1EA9\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false},{\"id\":\"1337020\",\"title\":\"Spatial Computing\",\"name\":\"Spatial Computing\",\"slug\":\"spatial-computing\",\"description\":\"Discuss spatial computing on Apple platforms and how to design and build an entirely new universe of apps and games for Apple Vision Pro.\",\"url\":\"\/topics\/spatial-computing\",\"imgSrc\":{},\"rssFeed\":\"\/topics\/rssFeed\/spatial-computing\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F36F19\",\"foregroundColor\":\"#792700\",\"children\":[{\"id\":\"1345020\",\"title\":\"Reality Composer Pro\",\"name\":\"Reality Composer Pro\",\"slug\":\"spatial-computing-reality-composer\",\"description\":\"Prototype and produce content for AR experiences using Reality Composer Pro.\",\"url\":\"\/topics\/spatial-computing\/spatial-computing-reality-composer\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitycomposer.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitycomposer.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitycomposer.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/realitycomposer.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/spatial-computing\/spatial-computing-reality-composer\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F36F194D\",\"foregroundColor\":\"#792700\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1339020\",\"title\":\"General\",\"name\":\"General\",\"slug\":\"spatial-computing-general\",\"description\":\"Discuss Spatial Computing on Apple Platforms.\",\"url\":\"\/topics\/spatial-computing\/spatial-computing-general\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/general.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/general.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/general.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/general.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/spatial-computing\/spatial-computing-general\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F36F194D\",\"foregroundColor\":\"#792700\",\"children\":[],\"testflight\":false,\"public\":false},{\"id\":\"1343020\",\"title\":\"ARKit\",\"name\":\"ARKit\",\"slug\":\"spatial-computing-arkit\",\"description\":\"Integrate iOS device camera and motion features to produce augmented reality experiences in your app or game using ARKit.\",\"url\":\"\/topics\/spatial-computing\/spatial-computing-arkit\",\"imgSrc\":{\"logo280\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/arkit.svg\",\"logo140\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/arkit.svg\",\"logo70\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/arkit.svg\",\"logo210\":\"\/forums\/public\/assets\/topics\/spatialcomputing\/arkit.svg\"},\"rssFeed\":\"\/topics\/rssFeed\/spatial-computing\/spatial-computing-arkit\",\"associatedTags\":[],\"hasMoreAssociatedTags\":false,\"recentQuestions\":[],\"pinnedPosts\":[],\"pinnedPostTags\":{},\"color\":\"#F36F194D\",\"foregroundColor\":\"#792700\",\"children\":[],\"testflight\":false,\"public\":false}],\"testflight\":false,\"public\":false}]";topicsJsonStr||(topicsJsonStr="[]");var temp=JSON.parse(decodeHtml(topicsJsonStr));function hslToRgb(t,o,r){o/=100,r/=100;let e=o=>(o+t/30)%12,n=o*Math.min(r,1-r),l=t=>r-n*Math.max(-1,Math.min(e(t)-3,Math.min(9-e(t),1)));return{r:Math.round(255*l(0)),g:Math.round(255*l(8)),b:Math.round(255*l(4))}}function getContrastingColorForHsl(t,o,r){let{r:e,g:n,b:l}=hslToRgb(t,o,r);return(.299*e+.587*n+.114*l)/255>.5?"black":"white"}function getContrastingTextColor(t){if(!t)return"black";let o=t.match(/(\d+\.?\d*)deg,\s*(\d+\.?\d*)%,\s*(\d+\.?\d*)%/);return o?getContrastingColorForHsl(parseInt(o[1]),parseInt(o[2]),parseInt(o[3])):"black"}_store.topics=temp.map(t=>({id:t.id,title:decodeHtml(t.title),description:decodeHtml(t.description),color:t.color,foregroundColor:t.foregroundColor,textColor:getContrastingTextColor(t.color),url:t.url,children:t.children.map(t=>({id:t.id,title:decodeHtml(t.title),description:decodeHtml(t.description),color:t.color,url:t.url}))})); </script> <input id="http-request-id" type="text" style="display:none;" value="2d99a1361d6b48bb19dfe99ce2e7a506"/> <script src="https://developer.apple.com/forums/public/compiled/decorator.js" type="text/javascript" defer></script> <!-- developer.apple.com metrics --> <script> /* RSID: */ var s_account="awdappledeveloper" </script> <script src="https://developer.apple.com/assets/metrics/scripts/analytics.js"></script> <script> s.pageName= AC && AC.Tracking && AC.Tracking.pageName(); s.channel="www.forums.developer"; /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/ var s_code=s.t();if(s_code)document.write(s_code) </script> <!-- /metrics --> <script type="text/javascript" async src="//developer.apple.com/assets/scripts/ac-globalnav.built.js"></script> <script type="text/javascript" async src="//developer.apple.com/assets/scripts/search.js"></script> <script type="text/javascript" defer src="//developer.apple.com/assets/scripts/DeveloperBreadcrumbs.js"></script> </body> </html>