前天买了一个apple watch 7,昨天想着做一个简单的app,来记录一下自己平时的投篮命中率。
最终的成品很简单,如下图所示,下方两个按钮,上方一个数字。左边的按钮表示投丢的数字,点击一下会+1,右边的表示投中的数量,同样的点击一下会+1。上方的数字是总共的投篮数,即下方两个数字之和,长按这个View,将会重置所有计数。
现在这个年代,要开发苹果相关app,当然是选用Swift + SwiftUI。这两个之前都没有接触过。于是在Youtube上面搜了一个教程,https://www.youtube.com/watch?v=F2ojC6TNwws ,由于Swift和Kotlin及其的相似,而SwiftUI和Jetpack Compose(which 我之前略有了解)也极其的相似,所以上面的教程理解起来几乎没有难度。用两倍速看完,也没花多久,一个多小时。
看完以后就开始着手开发。由于app极其简陋,开发也很快,折腾一下差不多半个小时就写完了。Xcode在开发SwiftUI方面有一个对新手非常友好的功能,是右边的Attribute Inspector面板。把鼠标定位到代码里面的某一个控件(如Button),这个面板就可以显示这个控件相关属性,并且还能在上面直接修改。最绝的是,修改完了以后,会自动的把相关的代码自动生成,加到相应的地方!这简直太奇妙了!
可以想象的是,刚开始的时候,你想实现某一个效果,但是不知道相应的代码怎么写,就可以在上面去做各种尝试。当然等你熟悉了以后,应该大部分时间还是会直接通过写代码来实现各种常用的效果。
写完了以后,先尝试在模拟器运行,这些都没有问题。但是怎么样运行到我自己买的手表上面呢?在这个步骤上,我遇到一些问题。
首先当然是google,然后找到这个帖子Install independent watchOS app | Apple Developer Forums,说要用充电线把手表跟电脑相连,我当时就有点好奇,watch的这根充电线是接触式的,并没有什么地方可以插到手表里面。这样也能“debug”吗?
带着怀疑我还是试了一下,唉?没有任何反应,手表上只是现实正在充电,没有任何app开发调试相关的页面出来。而Xcode上面选择device的列表里面也没显示这个手表的选项。我带着疑惑有google了几个页面,才发现是要把跟手表配对的”手机“连接上电脑。。。。
我当时就一口老血吐了出来!再回去看上面的帖子,人家说的也是“Connect your iPhone to your computer…”
好吧。。。
用USB插上手机,选择信任此电脑。Xcode上面出现类似“准备在watch debug的环境”的提示。但是很快就消失了。这时候选择device的列表里面出现了这个watch的选项,但是提示unavailable,点击这个选型,出现
no debugging symbols are available for the os version installed on apple watch…..
这样的错误提示,google找到这个帖子 xcode - No debugging symbols are available for the OS version installed on Apple Watch - Stack Overflow
在命令行执行
cd /Applications/Xcode.app/Contents/MacOS/
./Xcode -DVTDownloadableLogLevel 3
在输出的结果搜索 “Starting a download for Watch”
发现了错误提示
DVTDownloadable: Download Failed. Downloadable: https://download.developer.apple.com/Developer_Tools/watchOS_19R570/Watch6_9_19R570.dmg. Error Domain=DVTDownloadableErrors Code=8 "(null)" UserInfo={Errors=("Error Domain=DVTPortalServiceErrorDomain Code=1100 \"Your session has expired. Please log in.\" …
我试着根据上面的帖子提到的文章的步骤,运行
./Xcode -DVTDownloadableLeaveTemporaryFiles 1
但发现还是不行,还是出现上面的错误提示。我手动点击上面的下载链接想着手动下载,但是出现没有权限的页面。
我在想是不是因为我没有购买99美刀的会员费呢?这是又可能的,但是有觉得不应该啊,我只是在自己买的手表上面运行,还没到发布的阶段呢,不应该这个时候就要求我买会员啊。于是又google了一下错误日志,发现这个帖子。Constant “Your session has expired… | Apple Developer Forums最后一个回答,就是重新login,于是,我到Xcode的Preference页面,果然又个Account,果然提示我login失效了。重新登陆,再连上手机,这时候提示开始下载debugging symbols。。
这次持续的时间比较长,看起来是正常了。最后,又经过几次拔插拔插的过程,终于一切都ready了,这个小app也成功在我手机上运行起来了!
回头看来,人家错误提示已经很明显了,“Your session has expired. Please log in.”,但是如果你想我这样,之前没有接触过iOS开发,你可能不知道Xcode有一个account,需要login的(像安卓开发就不需要在AndroidStudio里面login),所以这个错误提示,可能就不会给你太多帮助。
以上就是我的Apple Watch App开发初体验。整体来说,对Swift语言和SwiftUI还是非常有好感的。不得不说iOS开发在文档、配套工具(如simulator、前文提到的attribute inspector等)这方面真的是可以吊打Android的。这块就看安卓后续怎么样进一步赶上了。