今天帮朋友解决iWatch的问题,他把项目直接扔给我,我们都知道如果项目中带一些需要开发认证的框架(比如Healthkit框架内)是不能直接运行的.昨天经过一个多小时的研究(PS:楼主比较笨),终于搞定这个问题.现在把自己爬坑的经过写下来,希望能帮助到大家.
朋友的项目就不便放出来啦,特意从github上找了个大牛写的Demo: https://github.com/shu223/watchOS-2-Sampler
大家是不是和我一样,项目一下载下来,就会迫不及待满怀期待的运行一下.结果...
错误1: Fail to code sign "***" No valid signing identities (i.e. certificate and private key pair) matching the team ID "****" were found.
然后我们就想都不想来fix issue.本人还是蛮信任苹果的,一些问题我们fix 下就会解决.然后我们就会满怀期待的再fix下.然后..
然后我们在fix...
错误2: Unable to find a team with the given Team ID '****' to which you belong. Please contact Apple Developer Prpgram Support.
现在问题出来了,是我们的开发者账号不匹配,所以我们要去项目中去配置一下.
选中我们的开发者账号在运行,又报错了..
现在的问题是找不到和"9Z86...."team ID匹配的正式.我们在fix下..
又报错了,而且只能点Done了,而且问题也没办法解决,别人的开发者账号,我们联系苹果也没有用,是不是很崩溃..其实只是我们应用中使用了Healthkit框架,而该框架是需要开发者账号认证的.
点一下fix issue..又报错了..
错误3: An App ID with identifier "*****" is not avaliable. Please enter a different string.
再fix..还是和上面报的错一样.然后你就会发现其实这并没什么卵用. 错误的原因就是这个identifer已经被别人占用了,你不可以再使了(如果男票和女票也可用这样就好了,被我占用了其他人就想都别想了,当然前提是你得有).既然这个被占用了那我们就换个呗,天涯何处无芳草..
现在我们在bundle ID 后面加了个标志,回到capabilities再fix一下.好了
我们再满怀憧憬的运行下...
错误4: No code signing identities found: No valid signing identitis (i.e certificate and private key pair) matching the team ID "***" were found. CodeSign error: code signing is required for product type 'WatchKit App' in SDK 'Watch OS 2.0'
又报错了..错误原因顾名思义,我们值改了extension.watch app也要改
再运行哈..又报错..
错误5: error: Enbedded binary's identifier is not prefixed with the parent app's bundle identifier.
错误的原因就是我们嵌入的bundle ID 和父APP的前缀不一样.苹果之所以能关联手机和watch的APP是有条件的.其bundle ID 必须遵循固定的格式. 也就是两者的前缀必须一样.好吧,现在我们再改一下父APP的bundle ID .
好啦.我们在运行下..又报错了,没完没了
错误6: error: WatchKit App doesn't contain any WatchKit Extensions whose WKAppBundleIdentifier matches "*****". Verify that the value if WKAppBundleIdentifier in your WatchKit Extension's Info.plist matches the value of CFBundleIndetifier in your WatchKit App's Info.plist.
好吧,按照苹果的提示做就ok了..一定要APP和extension的配置保持一致.
再运行一次..
错误7: error: warning: Is a directory
这次想骂人了,报了个莫名其妙的错误...
其实每次看到这个错误我就会clear一下工程,然后真正的错误就会显出原形.本人比较喜欢改了工程配置啥的就喜欢clean下.虽然有时间没必要(但有时候是很有用的).而且自认为是个好习惯...现在让我们看看真正的错误是啥.
错误8: error: Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier.
提示显示,内嵌的bundle ID 和父APP的不匹配.因为我们该了watch APP和extension,却没有改主APP的bundle ID.下面我们修改一下主APP的bundle ID
在运行一下....然后你会惊奇的发现 ----------------- 终于能运行了.