在我拥有的两个iOS应用程序之间共享文件/数据

nih*_*vex 7 objective-c ios

我有应用程序A和B,两者都是由我开发的.我想将文件从A发送到B,但它必须在不使用任何共享服务(如dropbox或任何涉及互联网连接的共享服务)的情况下发生.

OpenURL/CustomURLSchemes似乎不起作用,因为您可以传递的数据受限,文件大小可能很大.而且由于沙盒,我无法编写文件并传递url ... UIActivityViewController和UIDocumentInteractionController只有在有办法显示一个我到目前为止无法实现的应用程序时才是选项.

这可能吗?

我拥有这两个应用程序,文件扩展名是自定义的.

Fra*_*kie 10

实际上,您不需要扩展来在自己的应用之间共享数据.您可以使用应用程序组.

在MyApp1和MyApp2中转到目标,然后转到功能,然后单击应用程序组功能.让Xcode帮助您在Apple开发者帐户中获取应用程序组权利设置.

现在,您可以使用该应用组ID在您的应用之间共享数据.例如:

在MyApp1中将它放在appDelegate中:

NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.myappgroup"];
[myDefaults setObject:@"foo" forKey:@"bar"];
Run Code Online (Sandbox Code Playgroud)

在MyApp2中,appDelegate把这个:

NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.myappgroup"];
NSLog(@"Show me something: %@",[myDefaults objectForKey:@"bar"]);
Run Code Online (Sandbox Code Playgroud)

确保您用于套件名称的字符串与Xcode中应用程序组功能部分下的字符串完全相同,并且还确保您的权利plist中的字符串自动添加到项目中.

您还可以使用相同的想法共享文件:

NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:
    @"group.mycompany.myappgroup"];
Run Code Online (Sandbox Code Playgroud)

对于那些想要在Swift中看到它的人:

var userDefaults = NSUserDefaults(suiteName: "group.mycompany.myappgroup")

var fileManager = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.mycompany.myappgroup")
Run Code Online (Sandbox Code Playgroud)