微信号:infoqchina

介绍:有内容的技术社区媒体

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

2014-10-10 16:57 InfoQ

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请求。

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 架构师的自我修养 四舍五入? 并不准确 Devops2.0工具集黑宝书-读书笔记之1(中文版尚未出版) perl黑魔法10[十]our的历史 数据分析方法论大全