我想在后台运行一个应用程序(非Unity项目)并将一些数据写入XML文件。这是我已有的代码。但是,对于我的Unity应用程序,我需要知道文件的位置,以便我可以阅读它。
有谁知道iOS自动保存它创建的XML文件的位置?
答案 0 :(得分:1)
这个问题有点旧,但我会在这里回答,以防有人需要指南。
现在很有可能在iOS8.0 +中使用新的App Group功能。此功能允许2个或更多应用程序在一个共享目录中相遇。这是设置它的非常简短的步骤:
NSFileManager containerURLForSecurityApplicationGroupIdentifier
)UI的viewDidLoad函数是尝试使用代码段的好地方。
好的,你想在Unity3D中使用这个功能。看起来没有内置的统一API或任何资产商店,所以你必须编写自己的iOS原生插件。如果您不熟悉,请阅读一些文档。统一方面的C#存根可以是:
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public static class AppGroupPlugin
{
/* Interface to native implementation */
#region Native Link
#if UNITY_EDITOR
private static string _GetSharedFolderPath( string groupIdentifier )
{
// Handle dummy folder in editor mode
string path = System.IO.Path.Combine( System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), groupIdentifier );
if( !System.IO.Directory.Exists( path ) )
System.IO.Directory.CreateDirectory( path );
return path;
}
#elif UNITY_IOS
[DllImport ("__Internal")]
private static extern string _GetSharedFolderPath( string groupIdentifier );
#endif
#endregion
public static string GetSharedFolderPath( string groupIdentifier )
{
return _GetSharedFolderPath( groupIdentifier );
}
}
只需让Objective-C返回那个共享路径。我已经测试过,在获得此路径后,您可以在任何System.IO.File操作上使用此路径来读取写入文件,就好像它们是普通文件夹一样。这可以只是一个位于Plugins / iOS文件夹中的.m文件。
char* MakeNSStringCopy (NSString* ns)
{
if (ns == nil)
return NULL;
const char* string = [ns UTF8String];
char* res = (char*)malloc(strlen(string) + 1);
strcpy(res, string);
return res;
}
NSString* _GetSharedFolderPathInternal( NSString* groupIdentifier )
{
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:groupIdentifier];
if( containerURL != nil )
{
//NSLog( @"Path to share content is %@", [containerURL path] );
}
else
{
NSLog( @"Fail to call NSFileManager sharing" );
}
return [containerURL path];
}
// Unity script extern function shall call this function, interop NSString back to C-string,
// which then scripting engine will convert it to C# string to your script side.
const char* _GetSharedFolderPath( const char* groupIdentifier )
{
NSString* baseurl = _GetSharedFolderPathInternal( CreateNSString( groupIdentifier ) );
return MakeNSStringCopy( baseurl );
}