我有应用程序A和B,两者都是由我开发的.我想将文件从A发送到B,但它必须在不使用任何共享服务(如dropBox或任何涉及互联网连接的共享服务)的情况下发生.
OpenURL / CustomURLSchemes似乎不起作用,因为您可以传递的数据受限,文件大小可能很大.由于沙盒,我无法写入文件并传递网址…
UIActivityViewController和UIDocumentInteractionController只有在有办法显示我目前无法实现的应用程序时才是选项.
这可能吗?
解决方法
实际上,您不需要扩展来在自己的应用之间共享数据.您可以使用应用程序组.
在MyApp1和MyApp2中转到目标,然后转到功能,然后单击应用程序组功能.让Xcode帮助您在Apple开发者帐户中获取应用程序组权利设置.
现在,您可以使用该应用组ID在您的应用之间共享数据.例如:
在MyApp1中将它放在appDelegate中:
NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.myappgroup"]; [myDefaults setObject:@"foo" forKey:@"bar"];
在MyApp2中,appDelegate把这个:
NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.myappgroup"]; NSLog(@"Show me something: %@",[myDefaults objectForKey:@"bar"]);
确保您用于套件名称的字符串与Xcode中应用程序组功能部分下的字符串完全相同,并且还确保您的权利plist中的字符串自动添加到项目中.
您还可以使用相同的想法共享文件:
NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: @"group.mycompany.myappgroup"];
对于那些想要在Swift中看到它的人:
var userDefaults = NSUserDefaults(suiteName: "group.mycompany.myappgroup") var fileManager = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.mycompany.myappgroup")