{"id":42765,"date":"2024-04-05T19:12:35","date_gmt":"2024-04-05T23:12:35","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=42765"},"modified":"2024-05-06T16:02:36","modified_gmt":"2024-05-06T20:02:36","slug":"embedding-a-privacy-manifest-into-an-xcframework","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2024\/04\/05\/embedding-a-privacy-manifest-into-an-xcframework\/","title":{"rendered":"Embedding a Privacy Manifest Into an XCFramework"},"content":{"rendered":"<p><a href=\"https:\/\/rhonabwy.com\/2024\/02\/18\/embedding-a-privacy-manifest-into-an-xcframework\/\">Joe Heck<\/a> (<a href=\"https:\/\/mastodon.social\/@heckj\/111954429256086516\">Mastodon<\/a>):<\/p>\n<blockquote cite=\"https:\/\/rhonabwy.com\/2024\/02\/18\/embedding-a-privacy-manifest-into-an-xcframework\/\">\n<p>I expected documentation at least, and was hoping for an update in Xcode &#x2013; specifically the <code>xcodebuild<\/code> command &#x2013; to add an option that accepted a path to a manifest and included it appropriately. So far, nothing from Apple on that front. [&#8230;]  I hope that something is planned to make this easier, or at the minimum document a process, since it now appears to be an active requirement for new apps presented to the App Store.<\/p>\n<p>[&#8230;]<\/p>\n<p>In the meantime, if you&rsquo;re <a href=\"https:\/\/rhonabwy.com\/2023\/02\/10\/creating-an-xcframework\/\">Creating an XCFramework<\/a> and trying to figure out how to comply with Apple&rsquo;s requests for embedded privacy manifests, hopefully this article helps you get there. As I mentioned at the top of this post, this is based on my open source work in <a href=\"http:\/\/github.com\/automerge\/automerge-swift\/pulls\">Automerge-swift<\/a>.  I&rsquo;m including the library and XCFramework (and show it off) in a <a href=\"http:\/\/github.com\/automerge\/meetingnotes\/\">demo application<\/a>. I just finished working through the process of getting the archives validated and pushed to App Store Connect (with macOS and iOS deliverables). To be very clear,  the person I worked with at DTS was both critical and super-helpful. Without this information I would have been wandering blindly for months trying to get this sorted.<\/p>\n<\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2023\/12\/07\/privacy-manifests-update\/\">Privacy Manifests Update<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2023\/06\/20\/privacy-manifests\/\">Privacy Manifests<\/a><\/li>\n<\/ul>\n\n<p id=\"embedding-a-privacy-manifest-into-an-xcframework-update-2024-04-24\">Update (2024-04-24): <a href=\"https:\/\/twitter.com\/krzyzanowskim\/status\/1780189232473989187\">Marcin Krzyzanowski<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/krzyzanowskim\/status\/1780189232473989187\"><p>apple: you have to add a privacy manifest<br \/>\nme: what&rsquo;s that<br \/>\napple: it&rsquo;s a manifest<br \/>\nme: is it a plist file?<br \/>\napple: use Xcode to make one<br \/>\nme: using Xcode<br \/>\napple: not like that. The manifest file is invalid<br \/>\nme: what is valid<br \/>\napple: check documentation<br \/>\nme: it doesn&rsquo;t say the actual file format<br \/>\napple: it&rsquo;s invalid<br \/>\nme: google around and find out what is invalid in plist file because apparently, everyone struggles<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Joe Heck (Mastodon): I expected documentation at least, and was hoping for an update in Xcode &#x2013; specifically the xcodebuild command &#x2013; to add an option that accepted a path to a manifest and included it appropriately. So far, nothing from Apple on that front. [&#8230;] I hope that something is planned to make this [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2024-04-05T23:12:38Z","apple_news_api_id":"009bca24-4cec-4eae-a575-5ec965d35ec4","apple_news_api_modified_at":"2024-04-24T19:29:25Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAA==","apple_news_api_share_url":"https:\/\/apple.news\/AAJvKJEzsTq6ldV7JZdNexA","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[91,31,2321,30,2385,355,2581,71,226],"class_list":["post-42765","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-appstore","tag-ios","tag-ios-17","tag-mac","tag-macos-14-sonoma","tag-privacy","tag-privacy-manifests","tag-programming","tag-xcode"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/42765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=42765"}],"version-history":[{"count":3,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/42765\/revisions"}],"predecessor-version":[{"id":42946,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/42765\/revisions\/42946"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=42765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=42765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=42765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}