基本上,我有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");
但它似乎没有效果......
答案 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];
<...>