About 应用程序组(Group)

这个组创建了应用扩展和其关联应用程序都可以访问、共享的容器。打开Xcode中每一个对象的Capabilities窗格,并激活App Groups。 然后对共享组提供唯一标识符。请务必对Finder Sync扩展和其关联应用程序使用同一个标识符。

30.png

在Capabilities中激活App Groups

下列过程将允许com.apple.security.application-groups访问该对象。

有关应用程序组的详细信息,请参阅Entitlement Key Reference中的Adding an App to an App Group

接下来,通过调用initWithSuiteName:方法以及使用共享组中的标识符来实例化一个新的NSUserDefaults对象。这种init方法将创建一个默认的用户对象,用来加载和保存数据到共享容器中。

// 设置需同步的文件夹
NSUserDefaults *sharedDefaults =
[[NSUserDefaults alloc] initWithSuiteName:@ "com.example.domain.MyFirstFinderSyncExtension" ];
  
self.myFolderURL = [sharedDefaults URLForKey:MyFolderKey];
  
if  (self.myFolderURL == nil) {
     self.myFolderURL = [NSURL fileURLWithPath:[@ "~/Documents/MyFirstFinderSyncExtension Documents"  stringByExpandingTildeInPath]];;
}
  
[FIFinderSyncController defaultController].folderURLs = [NSSet setWithObject:self.myFolderURL];



//

与Containing App共享数据

应用扩展和它的containing app的安全域是有区别的。即便扩展包是嵌套在containing app包中的。默认情况下,应用扩展和containing app是不能直接访问对方的容器的。

不过你可以通过数据共享来实现这个愿望。比如,你希望应用扩展和它的containing app共享一个单一的大数据集。比如prerendered assets。 

要实现数据共享,我们要使用Xcode或者开发者门户网站允许应用扩展和它的containing app成为一个应用组,然后在开发者门户网站中注册应用组,并指明在containing app中使用该应用组。关于应用组的知识请查阅 Entitlement Key Reference 文档的 Adding an App to an App Group 章节。 

当你设置好应用组后,应用扩展和它的containing app就可以通过 NSUserDefaults API共享访问用户的信息。我们可以使用initWithSuiteName:方法实例化一个 NSUserDefaults 对象,然后传入共享组的标示符。比如一个共享扩展,它或许会更新用户最近经常使用的共享账号,那么我们可以这样来写: 

  1. // Create and share access to an NSUserDefaults object.  
  2. NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@ "com.example.domain.MyShareExtension" ]; 
  3.   
  4.   
  5. // Use the shared user defaults object to update the user's account.  
  6. [mySharedDefaults setObject:theAccountName forKey:@ "lastAccountName" ]; 

下图向我们展示了应用扩展和它的containing app是如何通过共享容器实现数据共享的.

Figure 4-1应用扩展的容器与其containing app的容器是不同的。 

重要提示: 如果你的应用扩展使用NSURLSession类执行后台的上传下载任务时,你必须要设置一个共享容器,这样扩展和containing app就可以访问到转换传输的数据。后台上传下载的更多知识请参阅Performing Uploads and Downloads 。

如果你设置了共享容器,那么containing app和它包含的允许参与数据分享的扩展就可以对共享容器里的内容进行读写操作了。同时你还必须要对数据的操作进行同步,以避免数据损坏或出错。使用UIDocument类、Core Data或者SQLite可以帮你可以让用户通过要求Safari运行JS文件来访问网络内容,并将结果返回到扩展。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值