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,如若转载,请注明来源。

目录
相关文章
|
13天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
54 1
|
16天前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
66 0
安卓项目:app注册/登录界面设计
|
29天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
5天前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
55 3
|
1月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
91 3
|
11天前
|
缓存 开发框架 移动开发
uni-app:下载使用uni&创建项目&和小程序链接&数据缓存&小程序打包 (一)
uni-app 是一个跨平台的开发框架,它允许开发者使用 Vue.js 来构建应用程序,并能够同时发布到多个平台,如微信小程序、支付宝小程序、H5、App(通过DCloud的打包服务)等。uni-app 的目标是通过统一的代码库,简化多平台开发过程,提高开发效率。 在这一部分中,我们将逐步介绍如何下载和使用uni-app、创建一个新的项目、如何将项目链接到小程序,以及实现数据缓存的基本方法。
|
1月前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
1月前
|
Java 开发工具 Android开发
安卓与iOS开发:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS两大星系璀璨夺目,各自拥有独特的光芒。本文将穿梭于这两个平台之间,探讨它们在开发环境、用户群体、成本效益等方面的差异,以及这些差异如何影响一个项目的航向和终点。我们将从初学者的视角出发,逐步深入,揭示选择合适平台的重要性,以及如何根据项目需求做出明智的选择。无论你是即将启航的新手开发者,还是已经在这片星海中航行的老手,这篇文章都将为你提供有价值的导航信息。
50 2
|
1月前
|
Java 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着重要的位置。本文旨在深入探讨这两个平台在开发过程中的主要差异,包括编程语言、开发工具、用户界面设计、性能优化以及市场分布等方面。通过对比分析,我们将揭示平台选择如何影响项目规划、执行效率和最终成果,为开发者在选择适合自己项目需求的平台时提供参考依据。
|
20天前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。