9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

构建 iOS 8 的分享扩展:一个包含问题、示例代码和变通方案的 GitHub 库

  • 2014-10-08
  • 本文字数:1176 字

    阅读完需:约 4 分钟

Tumblr 的 iOS 开发者 Bryan Irace 认为苹果在 iOS 8 中引入的分享扩展(Share extension)“为各种类型的应用开发者提供了一个令人激动的机会,能够以一种前所未有的方式将应用与用户的设备整合”。构建 iOS 分享扩展的道路不仅充满乐趣,同时也伴随挫折,不过这是尝试新技术时常有的事。

实际上,正如 Bryan 在讲述他创建 Tumblr 的应用分享扩展的经验时所提到的,“我们碰到了许多问题,最终只能用变通的方案解决。”已经发现的这些问题中,一部分可能是真正的问题,正在等待修复,另一部分则完全是当前 iOS 8 扩展的体系架构的限制。下面是对 Bryan 记录的所有问题的一个简要回顾:

  • 后台文件上传不能正常工作虽然根据苹果官方文档的描述,扩展可以通过 NSURLSessionUploadTask 上传保存在与主应用程序(Container App)共享的容器中的文件,Tumblr 的工程师们目前还没有找到能够让这个功能正常工作的方法。因为一旦分享扩展的进程被销毁,后台的上传好像也会随之终止。
  • 必须先打开主应用程序,分享扩展才能生效这个问题实际上只会对要安装新扩展的应用更新产生影响:应用的数据已经存在于共享容器之外的某个位置,而且只有主应用程序能够在第一次启动时迁移这些数据。如果在使用分享扩展之前没有完成这个步骤,用户将很可能无法完成他想要做的事情,因为扩展无法获取到任何用户数据(用户默认值、钥匙串、数据库、通过 NSCoding 序列化的文件等。)
  • NSFileCoordinator**** 不能正常工作 WWDC 大会的 Session 217 所介绍, NSFileCoordinator 被视为 NSUserDefaults 和 SQLite 的替代品,用于扩展和其主应用程序之间的定制数据持久化。
  • 分享扩展无法设置状态栏颜色分享扩展总是与主应用程序状态栏的显示风格一致。这可能会导致视觉颜色冲突而且没有变通方案。
  • 开发者无法从应用的 Activity**** 控制器中排除自己的分享扩展这是一个小问题,只影响那些即为其他应用提供分享扩展又提供个性化分享功能的应用。在这种情况下,开发者可能希望可以将自己的分享扩展从主应用程序的 Activity 控制器中排除,不过目前还无法实现。
  • 只有显式支持主应用程序提供的所有 Activity**** 项目,分享扩展才能够显示出来据 Bryan 介绍,这是他们发现的最严重的问题。为了理解这个问题,假设我们创建了一个支持图像 _ 或 _URL_ 或 _ 文本数据的分享扩展。那么,这个扩展只会在 _ 同时 _ 支持图像 _ 和 _URL_ 和 _ 文本的主应用程序中显示出来。

正如 Bryan 所说,不是每个构建分享扩展的开发者都一定会遇到上述这些限制,为了帮助其他开发者,他创建了一个 github 页面,详细说明了他们已经发现的所有问题,包括示例代码、相应的 Radar 问题编号、以及可用的变通方案。任何开发者如果发现了新的限制或找到已知限制的变通方案都可以发起一个 Pull 请求。

查看英文原文: Building iOS 8 Share Extensions: A GitHub Repo with Issues, Sample Code, and Workarounds

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2014-10-08 10:062086
用户头像

发布了 75 篇内容, 共 61.3 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

苦难过后,终会团聚

hellocj

中国银行正式启动区块链产业金融服务项目 ​

CECBC

区块链 金融 金融服务

典型的大型互联网系统使用了哪些技术方案和手段,主要解决什么问题?

极客海

Spring 学习笔记(二)Spring中的一些概念

无语

Spring Framework

The story of programmers in famous enterprises.

Marilyn

敏捷开发 快速开发

华为云专家讲述知识图谱构建流程及方法

华为云开发者联盟

华为 数据 知识图谱

从哲学源头思考自动驾驶网络架构设计

华为云开发者联盟

自动驾驶 架构

Programmatic Navigation using SwiftUI| 使用SwiftUI进行程序化导航

Daniel

高难度对话读书笔记—聆听篇

wo是一棵草

国外的公司都是如何对待大龄程序员的?在国内该如何应对?

Java架构师迁哥

服务器的发展历史

德胜网络-阳

Kubeless 如何基于 CPU 自动伸缩? | 玩转 Kubeless

donghui

Serverless kubeless

图解 K8S 源码 - Informer 篇

郭旭东

Kubernetes Kubernetes源码

个人数字人民币钱包即将亮相

CECBC

央行 数字人民币

为什么有了SOA,我们还用微服务?

架构师修行之路

微服务

JVM-技术专题-Java类文件结构

洛神灬殇

Java JVM

OpLog4j

Geek_746da6

OKR-VUCA时代目标管理利器实践分享

张兆东

第三周作业一

dll

年轻人大企打拼多年,刚升迁便遇巨大阻力难以解决,到底如何才能在职场中幸存?

Marilyn

敏捷开发 快速开发

来喽,来喽,Python 3.9正式版发布了~~~

华为云开发者联盟

Python 编程

CPU 执行程序的秘密,藏在了这 15 张图里

Java架构师迁哥

区块链 | 最火的七大职业了解一下

CECBC

区块链技术人才

【第四周】系统架构

云龙

我和我的智能联接

脑极体

拜托,学妹,别再问我怎么自学 Java 了!和盘托出

沉默王二

Java 自学编程

LeetCode题解:94. 二叉树的中序遍历,使用栈,JavaScript,详细注释

Lee Chen

大前端 LeetCode

亚马逊Prime会员日火爆开启一站购全球逾3000万正品商品

爱极客侠

在线教育企业迎来“秋招”大考,数字用户体验成胜负关键手

博睿数据

运维 APM 在线教育 AIOPS 用户体验

JVM-技术专题-类加载机制

洛神灬殇

Java JVM

翻译之深入注释俄罗斯民间故事的语料库,以实现对俄罗斯形式主义理论的机器学习

AI代笔

  • 扫码添加小助手
    领取最新资料包
构建iOS 8的分享扩展:一个包含问题、示例代码和变通方案的GitHub库_Android/iOS_Sergio De Simone_InfoQ精选文章