iOS项目添加WatchKit App模块实践

简介: 最近在公司原来一个项目里增加了Apple Watch模块,遇到了很多坑。首先说明,本人目前对Swift还不深入熟悉,所以还是打算在原项目里用OC来实现。其次,我用了Apple Watch3个月了,还是第一次入门,看了喵神的教程,一步步来的。

最近在公司原来一个项目里增加了Apple Watch模块,遇到了很多坑。首先说明,本人目前对Swift还不深入熟悉,所以还是打算在原项目里用OC来实现。其次,我用了Apple Watch3个月了,还是第一次入门,看了喵神的教程,一步步来的。想想WatchOS 都2了,再不用用都老了。

下面简单说一下这个过程:

0、前言

如果在这之前,你没有看过或了解WatchKit相关内容,那么建议你读喵神的两篇文章Apple WatchKit 初探WWDC15 Session笔记 - 30 分钟开发一个简单的 watchOS 2 app

一、增加watchOS

这个步骤就看图带过吧,对于还不知道的新手来说,看图最直接:

  • 1.新建Target


    img_6f9e6232421ff573ad86e2c8ec1f146e.png
    New Target
  • 2.选择 watchOS


    img_48108f8b1d5d690b5ac52da1f9823a40.png
    Watchk it App
  • 3.这步骤注意,默认勾选了Notification Scene,要解释一下:

  • <1> Glance Scene :** 如果勾选,就会在Interface.storyboard里默认生成GlanceController的界面,如果原来选中了,后来想不要,就直接在Interface.storyboard里把GlanceController界面删除就可以了。**

  • <2> Complication : 这个就是在系统表盘显示时,滚动 Digital Crown 时,进行一些操作,现在OS2里增加的时间旅行,就是滚动 Digital Crown时,天气和日程表计划跟着变动,这个功能还是有点用的。

    img_09b203f0e29111675520e6aaf9290b25.png
    配置

  • 4.点击激活吧


    img_7dab36713a0cd5bcbdde0d39c5bd121f.png
    Activate
  • 5.最后在原来项目里增加了这两个目录App和Extension。


    img_fd1816edbb54dc1218734bd70f9a6b70.png
    Watch目录

二、一些坑要填

1.默认新建的Target版本都是1.0,所以你要改成跟你现在项目的版本一样才行,不然就会报错。App和Extension的Target版本都要改。


img_1bbde1b420f19f04ebc3cd0962b6a989.png
Info.plist报错
img_e763fc55e03ed6e73df7ec2548c3c38a.png
更改为项目对应的版本号

2.默认App和Extension的Valid Architectures都是“armv7 armv7s i386 arm64”WatchOS运行的框架要改为armv7k。如果要在模拟器运行,增加i386。

img_9b0a9f4b932e3b038b02b4bd05e99b54.png
No architectures to compile for armv7k

img_cf42bf13969c64a9d7b767f7fd74eb72.png
App和Extension都要改成armv7k

还有一些其实的小问题,不太记得了,相信大家如果遇到自行搜索就能解决。

三、一些代码

Watch显示的界面全部由Interface.storyboard里的界面生成,逻辑就是在Extension里写,具体也没什么好写的,由于我是用OC写的,连图片缓存的都不会,参考了喵神原OS1文章:

在 Extension 的 target 中获得图片 (比如从网络下载或者代码动态生成等),并且需要重复使用的话,最好用 WKInterfaceDevice 的 -addCachedImage:name: 方法将其缓存到手表中。这样,当我们之后再使用这张图片的时候就可以直接通过 -setImageNamed: 来快速地从手表上生成并使用了。每个 app 的 cache 的尺寸大约是 20M,超过的话 WatchKit 将会从最老的数据开始删除,以腾出空间存储新的数据。

现在OS2就出现几个问题:

  • 1.add方法增加的是图片的名字,如果我是从网络下载的,名字怎么取?
  • 2.如何判断有没有缓存?
  • 3.OS2默认已经不会自动删除旧的数据了?

WKInterfaceDevice类里的*cachedImages这个属性OS2下报错,不知道为什么?有懂的求留言。

@property (nonatomic, readonly, strong) NSDictionary<NSString*, NSNumber*> *cachedImages WK_AVAILABLE_IOS_ONLY(8.2); // name and size of cached images

在这篇文章Apple Watch应用优化的一些心得技巧总结找到一些图片优化的方法
WatchKit用的图片库:Github上的WKImageCache,或者直接用KFSwiftImageLoader,或者有新的库,暂时没有去研究,求补充。

  • 最后提供一个WatchKit下用的NSURLSession方法,网上都是Swift写,OC这样写:

    NSString *requestUrl= @"http://www.google.com";
    NSURLSession * session = [NSURLSession sharedSession];
    
    NSURLSessionDataTask * task = [session dataTaskWithURL:[NSURL URLWithString:requestUrl] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if(data!=nil){// 请求成功
            NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
           
            
        }else{//请求失败

        }  
    }];
    
    [task resume];// 调用这个方法才会去请求网络

四、审核的一些坑

前面提到勾选 include Glance Sceneinclude Complication ,结果在实现时,没有搞好,直接在Glance Scene里显示一个下载链接的二维码,苹果审核员问我二维码是干什么用的?它会变吗?

  • Glance Scene最好要用一些有意义的数据显示


    img_8ea496918f60ec2a382565b83067355c.png
    二维码被拒绝
  • Complication这个,我是勾选了,第二次又被拒绝,我想说,苹果审核能一次审核全部功能吗????


    img_bbcee26e8f9c310e58bceb68349b16c7.png
    开启了Complication,但没有实现功能被拒绝
  • 取消Complication功能,就是把下图的Data Source Class删除,在把五个勾去掉就可以了:


    img_c9e7194466e45e0906322bef6d430d1a.png
    Complications Configuration

终于改了,希望审核明天通过吧!!

五、总结

关于Watch App审核,如果你选择了某个功能,但没有实现,那么一定会被拒绝的,大家注意一下这点,坑就来那里~

用了一个星期,了解了WatchKit的基础功能,实现了基本的需求。其实发现,刚开始很害怕实现不了,或者说,去做时知道一定会遇到很多问题,所以不敢去碰它。作为工程师,我们需要恒心和勇气,才能面对接下来的大数据时代,我们的知道时刻要充电,做好准备吧!

最后想吐槽一下苹果Watch,不知道是不是只有我遇到这个问题,表盘下面掉漆,这是苹果的技术吗???


img_51c86ad5ae3585de0d5220220fac50c9.jpe
苹果的logo首先掉色的,心都碎了

参考


注:本文首发于 iHTCboy's blog,如若转载,请注明来源。

目录
相关文章
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
85 3
|
1月前
|
iOS开发 开发者
一键制作 iOS 上架 App Store 描述文件教程
一键制作 iOS 上架 App Store 描述文件教程
|
1月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
89 0
|
14天前
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
12 0
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
|
1月前
|
开发者 iOS开发
iOS App上架新规解析:如何进行App备案
iOS App上架新规解析:如何进行App备案
125 0
|
1月前
|
iOS开发 开发者
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
|
1月前
|
移动开发 自然语言处理 小程序
miniprogram-to-uniapp使用指南(各种小程序项目转换为uni-app项目)
miniprogram-to-uniapp使用指南(各种小程序项目转换为uni-app项目)
33 1
|
1月前
|
移动开发 数据安全/隐私保护
HC05蓝牙模块与手机APP连接
HC05蓝牙模块与手机APP连接
38 1
|
2月前
|
iOS开发 开发者
苹果iOS App Store上架操作流程详解:从开发者账号到应用发布
很多开发者在开发完iOS APP、进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store的具体流程,如有未涉及到的部分,大家可以及时咨询,共同探讨。
|
2月前
|
安全 数据安全/隐私保护 iOS开发
iOS App 上架流程图文教学
在上架App 之前必须先准备好开发者帐号,但申请开发者帐号因法兰克早在之前已经申请好了,故就跳过此步骤,直接从产生凭证到上传App开始讲起。首先,要将自己辛苦写好的App 送审的话,则要依序做完下列几件事情即可。