在Obj-C项目和Swift 4项目之间共享文件夹

时间:2018-02-02 00:16:03

标签: ios objective-c swift

基本上,我有2个项目在运行,一个在obj-c中,另一个在Swift 4中,我希望他们访问他们的目录文件夹,以便在运行时交换他们的资源。现在我的方法是通过以下方式访问Swift 4项目的文档目录:

FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

因此它将生成如下路径:

  

/用户/ public1上/库/开发商/ CoreSimulator /设备/ 22D423BD-C28D-45B7-A976-D9FB02409988 /数据/容器/数据/应用/ 3B15E00A-910B-420E-8047-99F2E6E5013D /文件

如果我想获得obj-c项目的相同Documents目录,我将使用上面的路径,删除2个最后组件路径:

  

/用户/ public1上/库/开发商/ CoreSimulator /设备/ 22D423BD-C28D-45B7-A976-D9FB02409988 /数据/容器/数据/应用

然后使用enumerator.nextObject()找到obj-c项目的标志。它在模拟器中运行得很好,但在设备中,这些代码计数器的一个问题是,当在设备上运行时,这些文件夹不会出现在macOS文件夹中,而是出现在设备文件夹中,因此通过上面的代码执行的URL是像:

  

的/ var /移动/容器

我既不能找到也不能访问该文件夹,以便我的普查员无法工作。那么有没有办法访问该文件夹(使用代码)或某种机制来获得彼此共享的2个项目文件夹?

=============================================== ==========

编辑:使用AppGroup我在我的Obj-C项目中添加了这些代码:

NSUserDefaults *pathShared = [[NSUserDefaults alloc] nitWithSuiteName:@"com.example.myDomain"];

[pathShared setObject:directoryPath forKey:@"path"];

并在Swift 4代码中:

let userDefault = UserDefaults(suiteName: "com.example.myDomain");

let path = userDefault?.object(forKey: "path");

但它似乎没有效果......

2 个答案:

答案 0 :(得分:2)

在iOS上,沙盒会阻止您的应用访问任何其他应用的数据,即使您自己开发了其他应用也是如此。但是,您可以设置应用程序组并授权您的两个应用程序访问它,这样您就可以共享所需内容。 this page上的与您的应用程序共享数据标题可以很好地概述如何执行此操作

答案 1 :(得分:2)

您用于实现应用程序的语言不是原因。它只是具有不同sandboxes的不同应用程序。在iOS中,一个应用程序无法访问其他应用程序的沙箱中的文件。您可以使用相同的AppGroup为应用程序在应用程序之间共享数据,然后您可以使用共享UserDefaults并从共享directory中写入和读取文件:

<...>
NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName: @"com.example.domain.MyShareExtension"];
[mySharedDefaults setObject:theAccountName forKey:@"lastAccountName"];
<...>

NSFileManager* fileManager = [[NSFileManager defaultManger];
NSURL* url = [fileManager containerURLForSecurityApplicationGroupIdentifier:[self appContainerName];
<...>