{"id":8983,"date":"2014-06-13T14:50:34","date_gmt":"2014-06-13T18:50:34","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=8983"},"modified":"2024-11-05T13:27:24","modified_gmt":"2024-11-05T18:27:24","slug":"intents-and-extensions","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2014\/06\/13\/intents-and-extensions\/","title":{"rendered":"Intents and Extensions"},"content":{"rendered":"<p><a href=\"http:\/\/wiresareobsolete.com\/wordpress\/2014\/06\/intents-and-extensions\/\">Dave Smith<\/a>:<\/p>\n<blockquote cite=\"http:\/\/wiresareobsolete.com\/wordpress\/2014\/06\/intents-and-extensions\/\"><p>While iOS extensions are similarly considered components of a containing application (they are bundled together and cannot be deployed separately), their execution model is different than Android. iOS launches extension components into a separate (i.e. third) process from both the containing application and the calling application making the request (called the &ldquo;host&rdquo; by Apple).<\/p>\n<p>[&#8230;]<\/p>\n<p>Alongside an Intent&rsquo;s destination definition (via an implicit action, explicit class name, etc.), the filter scope can further narrow by referencing a custom data type that is only known to a private suite of applications.&nbsp;Currently in iOS, <code>NSExtensionItem<\/code> data returned from the extension can provide unique type identifiers, but the same is not true for data passed forward to an extension; identifiers are inferred from the type of data passed in&nbsp;(<a href=\"rdar:\/\/17217209\">rdar:\/\/17217209<\/a>).<\/p>\n<p>This is important because iOS, via the <code>NSExtensionActivationRule<\/code> in the Info.plist, determines when and where to show a custom action extension by comparing the input items passed to the <code>UIActivityViewController<\/code> with an <code>NSPredicate<\/code>. By limiting the scope of input items to standard data types, it becomes difficult to&nbsp;create more targeted actions that only respond to special data.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Dave Smith: While iOS extensions are similarly considered components of a containing application (they are bundled together and cannot be deployed separately), their execution model is different than Android. iOS launches extension components into a separate (i.e. third) process from both the containing application and the calling application making the request (called the &ldquo;host&rdquo; by [&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-11-05T18:27:25Z","apple_news_api_id":"f2283c7d-9566-4a51-bd1c-193753dee8be","apple_news_api_modified_at":"2024-11-05T18:27:26Z","apple_news_api_revision":"AAAAAAAAAAD\/\/\/\/\/\/\/\/\/\/w==","apple_news_api_share_url":"https:\/\/apple.news\/A8ig8fZVmSlG9HBk3U97ovg","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":[2],"tags":[248,2684,905,31,904],"class_list":["post-8983","post","type-post","status-publish","format-standard","hentry","category-technology","tag-android","tag-app-intents","tag-extensions","tag-ios","tag-ios-8"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/8983","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=8983"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/8983\/revisions"}],"predecessor-version":[{"id":8985,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/8983\/revisions\/8985"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=8983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=8983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=8983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}