Ios 如果当前目标有可用的watch app版本,如何签入代码?

Ios 如果当前目标有可用的watch app版本,如何签入代码?,ios,objective-c,watchos,Ios,Objective C,Watchos,我正在一个视图中工作,在这个视图中,我应该对应用程序进行自定义,以确定是否存在该应用程序的手表版本 我知道我可以使用: [[WCSession defaultSession]isWatchAppInstalled] 但这不是我想要的,因为用户可以在Apple Watch中卸载应用程序,但iOS应用程序仍然可以安装手表版本 此外: [[WCSession defaultSession]isPaired]不是我的情况。事实上,isWatchAppInstalled是处理这种情况的正确方法 如文件所述

我正在一个视图中工作,在这个视图中,我应该对应用程序进行自定义,以确定是否存在该应用程序的手表版本

我知道我可以使用:

[[WCSession defaultSession]isWatchAppInstalled]

但这不是我想要的,因为用户可以在Apple Watch中卸载应用程序,但iOS应用程序仍然可以安装手表版本

此外:

[[WCSession defaultSession]isPaired]不是我的情况。

事实上,isWatchAppInstalled是处理这种情况的正确方法

如文件所述:

用户可以选择只在Apple Watch上安装可用应用程序的子集。当用户的Apple Watch上安装了与当前iOS应用程序关联的Watch应用程序时,此属性的值为true;未安装时,此属性的值为false


该属性不会查看捆绑包内是否有可用的Watch应用程序。只有在当前配对的Apple Watch上安装了Watch应用程序时,才会返回true。如果用户从Watch中删除Watch应用程序,它将返回false。

在检查我正在处理的当前项目并测试创建两个新项目以检查捆绑包(一个包含Watch的项目和另一个不包含Watch的项目)后,我看到了它们之间的区别:

区别在于包含watch的项目有一个构建阶段,该阶段将watch应用嵌入到名为watch的子目录中

当显示内置查找器的包内容时,我们还可以看到Watch文件夹:

因此,每当iOS应用程序在代码中嵌入手表时,条件是:

+ (BOOL)isWatchAppEmbedded
{
    NSString *watchPath = [NSString stringWithFormat:@"%@/%@", [NSBundle mainBundle].resourcePath, @"Watch"];
    BOOL isDirectory = YES;

    if ([[NSFileManager defaultManager] fileExistsAtPath:watchPath isDirectory:&isDirectory]) {
        return YES;
    }

    return NO;
}