iOS错误:FBSOpenApplicationErrorDomain 错误5。这是什么意思?

5

我看到有关错误4的报告,但没有关于5的报告。当我尝试使用"openParentApplication:reply"请求时,我会在控制台上收到此消息。日志中没有足够的信息可以确定问题是在iOS代码、WK代码还是模拟器中。我已经重启了模拟器并清理了项目。有什么想法吗?

WK代码:

- (IBAction)sendRequest {

    NSDictionary *request = @{@"request":@"Request1"};

    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) {

        if (error) {
            NSLog(@"%@", error);
        } else {

            [self.label1 setText:[replyInfo objectForKey:@"response1"]];
            [self.label2 setText:[replyInfo objectForKey:@"response2"]];
            [self.label3 setText:[replyInfo objectForKey:@"response3"]];
        }

    }];
}

iOS 代码:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{

    NSLog(@"%s", __FUNCTION__);
    //([max intValue] - [min intValue]) + [min intValue]

    int randNum1 = arc4random_uniform(16);
    int randNum2 = arc4random_uniform(16);
    int randNum3 = arc4random_uniform(16);


    NSString *num1 = [NSString stringWithFormat:@"Test%d", randNum1]; 
    NSString *num2 = [NSString stringWithFormat:@"Test%d", randNum2];
    NSString *num3 = [NSString stringWithFormat:@"Test%d", randNum3]; 

    if ([[userInfo objectForKey:@"request"] isEqualToString:@"Request1"]) {

        NSLog(@"containing app received message from watch: Request1");


        NSDictionary *response = @{@"response1" : num1, @"response2" : num2, @"response3" : num3};
        reply(response);
    }

}

唯一的控制台日志是:
WatchKit Extension[48954:9523373] Error Domain=FBSOpenApplicationErrorDomain Code=5 "The operation couldn’t be completed. (FBSOpenApplicationErrorDomain error 5.)

2
好的。如承诺所述,答案如下:在info.plist中,我将“应用程序不在后台运行”设置为YES。这导致了问题。将该设置更改为NO即可解决。感谢AppleDev论坛上的Faber。 - ICL1901
4个回答

6

今天我也遇到了同样的问题。

  • 从模拟器中删除应用程序
  • 重置模拟器
  • 重新启动XCode
  • info.plist中进行更改

但是当我在Production中运行应用程序时,它可以正常工作。 应用程序在模拟器的生产模式下运行良好。

enter image description here

接下来,我删除了现有的dev模式方案,并创建了另一个dev模式方案,它可以正常工作。 然后,它提醒我,在实现应用程序中的后台获取功能时,我在那个Dev方案中选中了Launch due to a background fetch event选项。 后来我放弃了Background Fetch,但忘记取消选中此选项。

enter image description here


我认为你需要设置权限才能使用这个功能。无论如何,Xcode应该报告为什么无法启动应用程序,而不是报告“错误5”。因为我已选择了此方案选项,所以今天在Xcode 7.3中遇到了这个问题。 - Alex Zavatone

1
我建议您尝试简化。我在这里回答了一个非常类似的Swift问题。我会将逻辑简化为以下内容:

WK代码

- (IBAction)sendRequest {
    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) {
        NSLog(@"Reply Info: %@", replyInfo);
        NSLog(@"Error: %@", error);
    }];
}

iOS 代码

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
    NSDictionary *response = @{@"replyKey" : @"replyValue"};
    reply(response);
}

一旦您使此工作正常,然后逐步添加其他解析步骤。您还可以按照这些说明将调试器附加到iOS应用程序中以通过调用进行步进。您可能没有在iOS应用程序上调用回复块,甚至不知道它。


谢谢回答。我一直在朝着那个方向努力。我相信我已经到达了回复块,因为我已经记录了错误。它就发生在那里。但是我会更仔细地研究你的想法。 - ICL1901
很有趣,从 NSLog(@"Reply Info: %@", replyInfo); 得到的响应是 null。我在想是否有什么遗漏..我已经在一个小测试项目中使连接工作正常,我看不到任何不同--除了-其他应用程序从一开始就安装了 WK,而不是后来添加上去的。你认为这与这个问题有关吗? - ICL1901
很抱歉,我不太明白你的意思。如果在小项目中可以运行而在大项目中无法运行,那么可能是大项目的配置问题。如果是这种情况,我建议您开一个新的问题来解决,并将此问题标记为已解决。 - cnoon
完成了,但这是否意味着你认为我的代码看起来没问题?我也不太知道如何提出配置方面的问题。一旦我弄清楚发生了什么,我会在我的问题中发布更新。 - ICL1901

1
在我的情况下,只有退出模拟器才解决了这个问题。

0

禁用 AVX/AVX2 对我解决了这个错误。 如果你在 Virtual Box 上运行 macOS 终端

C > Program Files > Oracle > VirtualBox

然后输入以下内容

VBoxManage setextradata "$vm_name" VBoxInternal/CPUM/IsaExts/AVX 0
VBoxManage setextradata "$vm_name" VBoxInternal/CPUM/IsaExts/AVX2 0

请将 $vm_name 替换为您的虚拟机名称


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接