如果当前目标有可用的手表应用程序版本,如何签入代码?

Posted

技术标签:

【中文标题】如果当前目标有可用的手表应用程序版本,如何签入代码?【英文标题】:How to check in code if current target has watch app version available? 【发布时间】:2020-01-09 21:51:13 【问题描述】:

我正在一个视图中工作,如果有应用程序的 Watch 版本,我应该对其进行自定义。

我知道我可以使用:

[[WCSession defaultSession] isWatchAppInstalled]

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

还有:

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

【问题讨论】:

【参考方案1】:

其实isWatchAppInstalled才是处理这种情况的正确方法。

如文档所述:

用户可以选择仅在 Apple Watch 上安装一部分可用应用。当与当前 iOS 应用关联的 Watch 应用安装在用户的 Apple Watch 上时,此属性的值为 true,如果未安装,则为 false。

https://developer.apple.com/documentation/watchconnectivity/wcsession/1615623-iswatchappinstalled

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

【讨论】:

【参考方案2】:

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

不同之处在于,包含手表的项目有一个构建阶段,该阶段将手表应用嵌入到名为“Watch”的子目录中。

我们还可以在 Finder 中显示构建的包内容时看到“Watch”文件夹:

因此,只要 iOS 应用程序在代码中嵌入了 Watch,条件就是:

+ (BOOL)isWatchAppEmbedded

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

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

    return NO;

【讨论】:

以上是关于如果当前目标有可用的手表应用程序版本,如何签入代码?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何在签入策略期间获取挂起更改的程序集

苹果手表连接手机为啥显示需要更新?

iOS HealthKit - 如何获得绝对最新的当前心率,例如手表心率并发症?

如何在 Eclipse 代码模板中包含 svn 关键字

如何在 git 中更新我的代码库,而无需删除、存储或签入我当前的更改?

如何回滚 TFS 签入?