5

使用 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

但是我的应用程序不使用照片,我仍然尝试将链接中提到的照片隐私描述添加到我的 info.plist 中,但当然没有乐趣。问题仍然存在。

我的应用程序确实使用相机来扫描条形码。并且相机隐私描述在 info.plist 中,并且从去年开始。该应用程序不使用需要隐私描述的其他功能。

连接 iOS 9.3.5 设备时,相同的代码和 XC8 设置按预期工作。

有人见过这个吗?

4

3 回答 3

1

因此,经过大量分析,我终于在上周末解决了这个问题。知道它实际上与 iOS 10 中的 MFMailComposeViewController 隐私更改无关的关键是以下日志消息:

[MC] Result: YES

如果您得到“否”,那么您有隐私问题,但“是”表示隐私不是问题。无论如何,我终于发现,问题是我在 iOS 10 中运行的代码中存在时间问题。

在正在测试的同一设备模型上,一个带有 iOS 10 和一个带有 iOS 9.3.5 的问题是错误路径 UIAlertController present request 在另一个警报已经出现时被调用。在 iOS 9.x 和更早的版本中,预期的获胜并每次都首先出现只是“运气”。但是在 iOS 10 上,它每次都没有这样做,然后在我的情况下阻止了 MFMailComposeViewController。

以下代码有问题:

[self presentViewController:crashMailAlertController animated:YES completion:nil];

用此代码替换它解决了这个问题:

[self dismissViewControllerAnimated:YES completion:^{
            [self presentViewController:crashMailAlertController animated:YES completion:nil];
        }];

在我的情况下,我想要的只是确保这个错误路径 UIAlertController 总是首先出现,因为它是一个罕见的事件(仅在发生崩溃时),所以首先解除任何先前的警报是启动它的门票,以便 MFMailComposeViewController将跟随它嵌入在警报按钮操作中。

于 2016-10-22T17:28:05.577 回答
0

尝试弹出共享活动对话框(使用 UIActivityViewController)时,我收到了相同的日志消息。该代码在 ios9 中运行良好,但在 ios10 中失败(而不是对话框,我得到 2 个弹出窗口,其中只有“更多...”)。我以“activityItems:[myImage]”的形式传递了一个数组中的单个图像。问题似乎在于该参数需要一个非可选值数组,因此更改为 '[myImage!]' 解决了问题。

不确定这是否是所描述问题的解决方案,但也许类似的东西会起作用。

于 2016-10-16T14:33:01.247 回答
0

它为我工作!

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];
    }
于 2017-03-27T08:00:34.030 回答