iOS应用DEBUG模式App Group正常,RELEASE模式失效?疑entitlements.plist未生效
我已经在3个Xamarin.Forms应用中成功实现App Group共享文件夹功能,其中一个和当前开发的应用几乎完全相同,使用Visual Studio开发。DEBUG模式下App Group共享文件夹正常工作,但打包RELEASE版本上传至TestFlight后,无法访问该文件夹。
相关代码
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"; }
执行日志
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()返回空值,进而引发空引用异常。后续排查发现,App Store Connect的元数据中缺少App Group权限配置:
"com.apple.security.application-groups: ( "group.com.mycompany.myapp")"
当前应用与其他正常工作的应用相比,仅在entitlements.plist的keychain-access-groups标识符引用上存在差异。
排查与解决步骤
确认Release版的Entitlements配置
在Visual Studio中右键iOS项目→属性→iOS Bundle Signing,切换到Release配置,确保Custom Entitlements指向正确的entitlements.plist文件,且该文件内包含正确的App Group标识符(group.com.pronktech.mobilize)。验证Provisioning Profile权限
登录Apple Developer后台,检查对应Release版本的Provisioning Profile是否包含目标App Group权限。若未包含,重新生成包含该权限的Profile,下载后导入Visual Studio。检查App Store Connect的App Groups关联
在App Store Connect的应用详情→功能→App Groups中,确认已添加对应的App Group,且当前应用已关联该组。若未添加,需先在Apple Developer后台创建App Group,再回到App Store Connect完成关联。清理并重新打包
删除项目的bin、obj目录,清理解决方案后重新生成Release版本,确保打包过程中正确嵌入了entitlements配置。核对标识符一致性
确保代码中GetContainerUrl的参数、entitlements.plist中的App Group标识符、Apple Developer后台的配置完全一致,注意大小写和拼写细节。
内容的提问来源于stack exchange,提问作者bobwki

