欢迎来到天天文库
浏览记录
ID:52239074
大小:582.95 KB
页数:8页
时间:2020-03-25
《-- iOS8与OS X v1010应用扩展编程指南.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、常见问题的处理方案--iOS8/OSXv10.10应用扩展编程指南当你在开发一个应用扩展,让其执行某个任务时,你可能会遇到一些常见的,或者说在多种扩展中都会出现的通用的问题,并且必须要处理这些问题。在这一章节中,我们将帮助你如何应对和处理这些常见的问题。使用内嵌框架共享代码你可以创建一个内嵌框架,用于在应用扩展和它的载体应用之间共享代码。比如,你开发了一个图片滤镜的照片编辑扩展,同时该扩展的载体应用也有这个功能,那么你就可以将实现该功能的代码封装成一个框架,让扩展target和载体应用target都使用这个框架。你要确保你创建的内嵌框架不包含应用
2、扩展不能使用的API。这类API一般使用unavailability宏来标记,比如像NS_EXTENSION_UNAVAILABLE。如果你创建的内嵌框架中包含应用扩展不能使用的API,那么你将其Link到载体应用没关系,载体应用可以正常使用框架中的API,但是不能与应用扩展共享代码,也就是应用扩展不能使用该框架提供的所有API,继而无法做到代码共享。如果你上传AppStore的应用扩展中有这种框架,或者应用扩展中使用了不允许使用的API,那么审核时会被拒绝。如果我们要想应用扩展使用内嵌框架,那么首先要配置一下。将target的RequireOn
3、lyApp-Extension-SafeAPI选项设置为Yes。如果你不这样设置,那么Xcode会向你提示警告:linkingagainstdylibnotsafeforuseinapplicationextensions。重要提示:如果载体应用要使用内嵌框架,那么必须要支持arm64架构,否则在上传AppStore时会被拒绝。(如“创建应用扩展”章节中介绍的,所有应用扩展都要支持arm64架构。)在配置你的Xcode项目时,在BuildPhases选项卡的CopyFiles项中一定要将Destination设置为Frameworks。重要提示:
4、我们要始终将Destination设置为Frameworks,如果你将其设置为SharedFramework,那么上传AppStore时会被拒绝的。你可以让载体应用支持iOS7或更早的版本,但当在iOS8或更新的版本中运行时,要特别注意内嵌框架的安全性。详细内容可以参阅DeployingaContainingApptoOlderVersionsofiOS。有关创建和使用内嵌框架的更多内容,请观看WWDC2014的视频“BuildingModernFrameworks”。与载体应用共享数据虽然应用扩展的包内嵌在载体应用中,但是应用扩展和载体应用的安
5、全域还是不一样的。默认情况下,应用扩展和载体应用是不能直接访问对方内容的。不过你可以通过数据共享来实现这个愿望。比如,你希望应用扩展和它的载体应用共享一个单一的大数据集。比如prerenderedassets。要实现数据共享,我们要使用Xcode或者开发者门户网站允许应用扩展和它的载体应用成为一个应用组,然后在开发者门户网站中注册应用组,并指明在载体应用中使用该应用组。关于应用组的知识请查阅EntitlementKeyReference文档的AddinganApptoanAppGroup章节。当你设置好应用组后,应用扩展和它的载体应用就可以通过N
6、SUserDefaultsAPI共享访问用户的信息。我们可以使用initWithSuiteName:方法实例化一个NSUserDefaults对象,然后传入共享组的标示符。比如一个共享扩展,它或许会更新用户最近经常使用的共享账号,那么我们可以这样来写:{%highlightswift%}//CreateandshareaccesstoanNSUserDefaultsobject.NSUserDefaults*mySharedDefaults=[[NSUserDefaultsalloc]initWithSuiteName:@"com.example
7、.domain.MyShareExtension"];//Usetheshareduserdefaultsobjecttoupdatetheuser'saccount.[mySharedDefaultssetObject:theAccountNameforKey:@"lastAccountName"];{%endhighlight%}下图向我们展示了应用扩展和它的载体应用是如何通过共享容器实现数据共享的:重要提示:如果你的应用扩展使用NSURLSession类执行后台的上传下载任务时,你必须要设置一个共享容器。这样扩展和载体应用就可以访问到转换传
8、输的数据。后台上传下载的更多知识请参阅PerformingUploadsandDownloads。如果你设置了共享容器,那么载体应用和它
此文档下载收益归作者所有