仅 MFMailComposeViewController 和 iOS 10 的隐私问题
Privacy Problems with MFMailComposeViewController and iOS 10 only
使用 PLCrashReporter、AWS Cognito/SNS 和 Google 分析框架,使用 Xcode 8.0 重建已发布的应用程序。
看到仅在 iOS 10.x 设备上,邮件撰写 vc 在 运行 我的测试桶中不再显示。在 Xcode 控制台中,当达到 if([MFMailComposeViewController.canSendMail]) 时,我会立即看到这些消息:
[MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
[MC] Filtering mail sheet accounts for bundle ID: [MY BUNDLE ID], source account management: 1
[MC] Result: YES
我在这里找到了对此类控制台消息的引用:UIActivityViewController crash on iOS 10
但我的应用程序不使用照片,我仍然尝试将 link 中注明的照片隐私说明添加到我的 info.plist 中,但当然没有快乐。问题仍然存在。
我的应用确实使用摄像头来扫描条形码。相机隐私说明在 info.plist 中,并且从去年开始。该应用程序不使用其他需要隐私说明的功能。
当连接 iOS 9.3.5 设备时,相同的代码和 XC8 设置按预期工作。
有人看过吗?
我在尝试弹出“共享活动”对话框(使用 UIActivityViewController)时收到相同的日志消息。该代码在 ios9 中运行良好,但在 ios10 中失败(而不是对话框,我得到 2 个弹出窗口,其中只有 'More ...')。我在一个数组中传递单个图像,如 'activityItems: [myImage]'。问题似乎在于此参数需要一个非可选值数组,因此更改为“[myImage!]”解决了问题。
不确定这是否是所描述问题的解决方案,但也许类似的方法会起作用。
经过大量分析,我终于在上周末解决了这个问题。知道它实际上与 iOS 10 中的 MFMailComposeViewController 隐私更改无关的关键是这条日志消息:
[MC] Result: YES
如果您得到 "NO",那么您遇到了隐私问题,但是“是”表示隐私不是问题。我终于发现,无论如何,在我这里,问题是我的代码中的时间问题 运行 in iOS 10.
在正在测试的同一设备型号上,一个 iOS 10 和一个 iOS 9.3.5 问题是错误路径 UIAlertController present 请求在另一个警报已经出现时被调用.在 iOS 9.x 和更早的时候,每次都是 "luck" 预期的获胜并首先出现。但是在 iOS 10 上,它每次都没有这样做,然后在我的情况下阻止了 MFMailComposeViewController。
以下代码有问题:
[self presentViewController:crashMailAlertController animated:YES completion:nil];
用此代码替换它解决了问题:
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:crashMailAlertController animated:YES completion:nil];
}];
在我的例子中,我想要的只是确保这个错误路径 UIAlertController 总是首先出现,因为它是一个罕见的事件(只有当崩溃发生时),所以首先解除任何以前的警报是获得它的门票向上,以便 MFMailComposeViewController 将跟随它嵌入到警报按钮操作中。
对我有用!!
if([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
mailCont.mailComposeDelegate = self; // Required to invoke mailComposeController when send
[mailCont setSubject:@"Mail Subject"];
[mailCont setToRecipients:[NSArray arrayWithObject:@"demo@gmail.com"]];
[mailCont setMessageBody:@"" isHTML:NO];
[self presentViewController:mailCont animated:YES completion:nil];
}
使用 PLCrashReporter、AWS Cognito/SNS 和 Google 分析框架,使用 Xcode 8.0 重建已发布的应用程序。
看到仅在 iOS 10.x 设备上,邮件撰写 vc 在 运行 我的测试桶中不再显示。在 Xcode 控制台中,当达到 if([MFMailComposeViewController.canSendMail]) 时,我会立即看到这些消息:
[MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
[MC] Filtering mail sheet accounts for bundle ID: [MY BUNDLE ID], source account management: 1
[MC] Result: YES
我在这里找到了对此类控制台消息的引用:UIActivityViewController crash on iOS 10
但我的应用程序不使用照片,我仍然尝试将 link 中注明的照片隐私说明添加到我的 info.plist 中,但当然没有快乐。问题仍然存在。
我的应用确实使用摄像头来扫描条形码。相机隐私说明在 info.plist 中,并且从去年开始。该应用程序不使用其他需要隐私说明的功能。
当连接 iOS 9.3.5 设备时,相同的代码和 XC8 设置按预期工作。
有人看过吗?
我在尝试弹出“共享活动”对话框(使用 UIActivityViewController)时收到相同的日志消息。该代码在 ios9 中运行良好,但在 ios10 中失败(而不是对话框,我得到 2 个弹出窗口,其中只有 'More ...')。我在一个数组中传递单个图像,如 'activityItems: [myImage]'。问题似乎在于此参数需要一个非可选值数组,因此更改为“[myImage!]”解决了问题。
不确定这是否是所描述问题的解决方案,但也许类似的方法会起作用。
经过大量分析,我终于在上周末解决了这个问题。知道它实际上与 iOS 10 中的 MFMailComposeViewController 隐私更改无关的关键是这条日志消息:
[MC] Result: YES
如果您得到 "NO",那么您遇到了隐私问题,但是“是”表示隐私不是问题。我终于发现,无论如何,在我这里,问题是我的代码中的时间问题 运行 in iOS 10.
在正在测试的同一设备型号上,一个 iOS 10 和一个 iOS 9.3.5 问题是错误路径 UIAlertController present 请求在另一个警报已经出现时被调用.在 iOS 9.x 和更早的时候,每次都是 "luck" 预期的获胜并首先出现。但是在 iOS 10 上,它每次都没有这样做,然后在我的情况下阻止了 MFMailComposeViewController。
以下代码有问题:
[self presentViewController:crashMailAlertController animated:YES completion:nil];
用此代码替换它解决了问题:
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:crashMailAlertController animated:YES completion:nil];
}];
在我的例子中,我想要的只是确保这个错误路径 UIAlertController 总是首先出现,因为它是一个罕见的事件(只有当崩溃发生时),所以首先解除任何以前的警报是获得它的门票向上,以便 MFMailComposeViewController 将跟随它嵌入到警报按钮操作中。
对我有用!!
if([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
mailCont.mailComposeDelegate = self; // Required to invoke mailComposeController when send
[mailCont setSubject:@"Mail Subject"];
[mailCont setToRecipients:[NSArray arrayWithObject:@"demo@gmail.com"]];
[mailCont setMessageBody:@"" isHTML:NO];
[self presentViewController:mailCont animated:YES completion:nil];
}