GMTC 全球大前端技术大会 8 折涨价倒计时 2 天,现在购票立减 ¥960 ! 了解详情
写点什么

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

2014 年 10 月 08 日

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

2014 年 10 月 08 日 10:061785
用户头像

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

关注

评论

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

程序员专属“灯谜”大挑战,答对六题算你赢!

京东科技开发者

编程语言 集群

LeetCode题解:123. 买卖股票的最佳时机 III,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

极限编程技术实践

Teobler

敏捷 敏捷开发 TDD 重构 极限编程

华为云举办AI经典论文复现活动,打造领先AI开发者学习社区

华为云开发者社区

AI 华为云 modelarts 论文 AI Gallery

GaussDB(DWS):非侵入式备份及其在NBU上的应用

华为云开发者社区

架构 GaussDB 集群 备份 NBU

MySQL字段默认值设置详解

Simon

MySQL 数据库

技术案例 | 云原生微服务落地难?百度自用CRM这样做

百度开发者中心

CRM 云原生微服务 #百度智能云#

使用 pyVmomi 采集 vSphere 监控指标

冯骐

Python 运维 监控 Open-Falcon vpshere

程序员之禅(一)

每天读本书

读书笔记

从0到1建立数据分析指标体系底层逻辑

小飞象@木木自由

数据分析 数据指标 数据分析体系

Linux入门篇 —— Linux 磁盘管理之磁盘理论篇

若尘

Linux linux编程 磁盘

看完你就明白什么是图神经网络

华为云开发者社区

神经网络 深度学习 节点 图神经网络 图结构

工作两三年了,整不明白架构图都画啥?

小傅哥

Java 后端 小傅哥 架构设计 画架构图

QA视角看数据匿名化

BY林子

数据安全 测试右移 用户数据 数据脱敏

Node集群思考以及cluster包初探

秋呈

后台开发 Node

树莓派上的家庭监控中心

冯骐

运维 树莓派 监控系统 Open-Falcon 物联网,

建立博客数据库并连接ES用MySQL还是MongoDB更合理

读字节

MySQL mongodb 分布式 分布式数据库 分布式存储

国产芯片WiFi物联网智能插座—电耗采集功能设计

不脱发的程序猿

28天写作 国产芯片 电耗检测 电压电流 华大MCU

OS命令--shell中数组的操作

cloudcoder

数组 Shell 循环引用

【LeetCode】区域和检索 - 数组不可变Java题解

HQ数字卡

算法 LeetCode 28天写作

Git学习游戏化,从Learn Git Branching 开始

程序老王

git 学习方法 git 学习 学习推荐

MongoDB 在评论中台的实践

vivo互联网技术

数据库 mongodb 分布式 集群

华为云原生数据仓库GaussDB(DWS)深度技术解读:融、快、大、稳、易

华为云开发者社区

数据库 云原生 华为云 GaussDB 数仓

元宵节元宵钱,不买元宵买云资源! | 2核4G低至0.79元/天

京东科技开发者

云主机 云服务器 云存储 云硬盘

刷屏洗脑的“吗咿呀嘿”,到底是个啥?

架构精进之路

商业模式 28天写作 3月日更

构建一套适合微服务的高可用架构

环信

海豚调度dolphinscheduler SQL脚本初始化流程

cloudcoder

海豚调度 调度引擎 分布式任务调度

树莓派上的温湿度环境监控

冯骐

运维 树莓派 物联网 监控告警

搭建一个 802.1x 的 web 测试服务

冯骐

网络 监控系统 Open-Falcon radius eduroam

EEPROM CAT24CXX实现分页读、写数据

不脱发的程序猿

28天写作 CAT24C08 EEPROM 嵌入式软件 单片机

山东青岛推进平安小区建设!源中瑞智慧社区平台解决方案

源中瑞-龙先生

解决方案 山东 源中瑞 青岛 智慧社区

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