我现在已经在3个应用程序中成功实现了应用程序组共享文件夹。 其中之一与我现在使用的应用程序几乎相同。 这些是 Xamarin.Forms 应用程序,我正在使用 Visual Studio。
从 Visual Studio 中,我“调试”有问题的应用程序(或者在调试部署后运行),并且共享文件夹工作正常。 但是在“发布”模式下构建并发送到 TestFlight,App Group 文件夹似乎不存在。
这是我的代码:
try {
savedLog += $"Util[iOS].ctor - Atttempt to get Group folder" + "\r\n";
var FileManager = new NSFileManager();
savedLog += $"Util[iOS].ctor - FileManager={FileManager}" + "\r\n";
var appGroupContainer =
FileManager.GetContainerUrl("group.com.pronktech.mobilize");
savedLog += $"Util[iOS].ctor - appGroupContainer={appGroupContainer}" + "\r\n";
groupFolderPath = appGroupContainer.Path;
savedLog += $"Util[iOS].ctor - groupFolderPath={groupFolderPath}" + "\r\n";
} catch (Exception ex) {
savedLog += $"Util[iOS].ctor - Exception on getting groupFolderPath, ex={ex.Message}" + "\r\n";
}
这是之后的“savedLog”:
Util[iOS].ctor - Atttempt to get Group folder\r\n
Util[iOS].ctor - FileManager=<NSFileManager: 0x3015b7e60>\r\n
Util[iOS].ctor - appGroupContainer=\r\n
Util[iOS].ctor - Exception on getting groupFolderPath, ex=Object reference not set to an instance of an object\r\n
因此,FileManager.GetContainerURL() 似乎返回一个空字符串。
更新:在写完之后,在发布之前,一个理论已经形成:entitlements.plist 文件不能在发布模式下应用吗? 在查看 appstoreconnect.com 上元数据的差异时,很明显元数据存在无法解释的差异,包括没有
“com.apple.security.application-groups:(“group.com.mycompany.myapp” )”
仅供参考,两个应用程序中的 entitlements.plist 文件完全相同(除了 keychain-access-groups 中对其标识符的引用)。
这是完全的驾驶舱错误 - 就像@piepants所说,在构建设置中,在“iOS Bundle Signing”下,“自定义权利”条目被清除。 浏览到“Entitlements.plist”,现在元数据与这方面的其他应用程序相匹配。
我仍然有点困惑——我还有其他一些“权利”,比如无线配件配置,但没有这个似乎并没有导致问题。