Apple Watch开发中遇到的那些问题(WatchOS 2)

WatchOS 2 开发全过程

实现效果@2x.png

磕磕绊绊,终于把Watch更新了,放张最有代表性的界面吧。还是会按照实际操作的顺序来写这篇文字。

1.创建WatchKit模块
build.png

试着运行一下,在这里程序可能会报错,原因是系统创建Watch Target的时候,Version版本号默认给的都是1.0,所以可能会与原程序发生一些冲突,改过来就OK了。

2.实现App端与Watch端的通信

在WatchOS 2中下面这对方法已经被干掉了

        BOOL sendSuccess = [WKInterfaceController openParentApplication:[request dictionaryValue] reply:^(NSDictionary *replyInfo, NSError *error) {
            if (!block) {
                return;
            }}
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply
{}

不过不用担心,在新版本中苹果添加了WatchConnectivity.framework,其中主要用到的是WCSession这个类,这里面细化了多个方法,可以根据实际需要选择相对应的方法。具体的方法就不列出来了,在实际编码中用到了下面这个两个方法,第一个用来传简单的数据信息和图片,第二个用来传音频文件。

[[ConnectManager sharedManager].session sendMessage:[request dictionaryValue]
                                               replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {
                                                   
                                               } errorHandler:^(NSError * _Nonnull error) {
                                                   
                                               }];
[[ConnectManager sharedManager].session transferFile:url metadata:dic];
        
    });

相对应的代理方法:

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> * _Nonnull))replyHandler
- (void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file

在使用上面这两个方法时,需要注意几点:
1.sendMessage只支持标准数据类型
2.一开始我打算将音频也用sendMessage方法传输,然后程序会抛出错误,意思是传输的内容过大,无法传输,使用sendMessageData同样会抛出这个错误。
3.当我的某个NSString类型的参数为空时,传输也会失败,这个问题坑了我半天
4.使用Watch录制音频涉及到App Groups方面的内容,考虑到都写到一篇文章里篇幅较大,所以我会单开一篇,包括音频格式的转换等。文章链接如下:
Watch音频录制,.wav转换.mp3,获取音频文件时长

关于WCSession的使用,可以看看这篇文章
stackoverflow-WCSession

3.Glance页面实现与交互

苹果将整块Glance页面分为Upper和Lower两部分,如下图所示。最好让设计了解到这一点,因为在这个界面上的布局不是随心所欲的,而且苹果也不建议在这个页面放Table之类的控件,另外就是Glance没有交互响应,点击任何位置都会跳转到应用内部。

Upper.png
Lower.png

如果想通知App是从Glance页面进入,或者想要传入一些其他信息,可以调用下面的方法。

[self updateUserActivity:@"com.seven.watch.glance" userInfo:info webpageURL:nil];

然后在相应的WKInterfaceController中接收

- (void)handleUserActivity:(NSDictionary *)userInfo
{}

基本的数据通信差不多就都实现了,可能写的不是很细致,如果有什么问题可以留言,大家一起探讨。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,796评论 4 61
  • 其实, 我觉得我这个人挺敏感的, 敏感到什么程度呢? 我发你消息你没有回我, 我会把对话框删掉, 假装我没找过你。...
    披萨狗阅读 2,870评论 0 0
  • 鲁迅和他的老鼠和猫咪的故事。 在《阿长与山海经》里,迅哥儿这样交代「阿长」的名称来由: 我平时叫她「阿妈」,连「长...
    宴息阅读 9,374评论 0 2
  • 郭相麟 一个孩子充满着对武术的好奇,在名师的指点下,走上了人生坎坷拼搏之路! 在与对手武术搏击的挑战中, 一次...
    郭相麟阅读 1,121评论 0 0
  • 这周确定了我本月的主题——让时间看得见,这由早起的“输出”想到的。早起不单单是打个卡这样简单,有效的输入输出才是早...
    将心比心_赫阅读 1,765评论 0 0

友情链接更多精彩内容