Android和IOS的app发布的流程有一个相同之处,就是都需要先将编译好的app签名,然后上传到market里,但两者的复杂度是冰火两重天。Android可以手动通过集成在eclipse里的工具进行签名,或者可以用ant进行自动化签名。但IOS app的发布过程非常的痛苦。
发布IOS app有两种方式,一种称为AD_HOC,由于这种方式需要预先获取设备的UDID,因此适合在企业内部发布;另一种方式众所周之的方式就是发布到app store里。Xcode4集成了这两种发布方式,在Xocde4的Organizer窗口里,切换到Archives选项卡,当使用Archives方式编译后,编译出来的文件会出现在这个选项卡里。这个选项卡里还有三个按钮,分别是Validate、Share和Submit,其中Validate按钮是用作验证格式和签名是否正确的,而Share则是以ipa格式发布,Submit则是上传到App Store里。这两个发布方式的具体操作可以查看苹果的文档:https://developer.apple.com/ios/manage/distribution/index.action,如果是Xode4以上的可以看这里:
http://useyourloaf.com/blog/2010/12/23/creating-iphone-ad-hoc-distribution-builds.html。
抛开发布流程的复杂度不说,其中有几个关键步骤是非常值得分享的。
1、 在Archive编译完成后,如果点share或submit,会提示错误:Thiskind of archive cannot be signed,如果点Validate校验,会提示错误:does not contain a single–bundle application or contains multipleproducts. Please select another archive, or adjust your scheme to create asingle–bundle application。出现这些错误,一般是你的项目里包含了其它库,例如cocos2d。xcode4下默认会将cocos2d编译成一个后缀名为.a的静态库文件,生成的archive包里的application下有两个目录,一个是.app的文件,还有一个是usr的目录,里面是cocos2d编译出来的.a文件,所以会校验不通过。解决方案如下,先在project navigator里点击项目的图标,在右边的项目配置界面里点击名为cocos2d libraries的target,在Building Setting里找到Skip Install的项目,将值改为YES。
2、 当在项目中需要用到apple的推送功能时,需要增加一个Entitlements.plist文件,通过xcode的添加文件向导可以向项目里添加这个文件。如果是需要使用ipa格式发布,当在Archive编译完成后,点击validate或share的时候,如果出现以下错误:this bundle is invalid. the application-identifier entitlement isnot formatted correctly,请将对应的Entitlements.plist文件的内容按下图填写。
3、 如果是要想发布到appstore里,在点击Submit按钮并开始上传文件后,若出现application failed codesign verification. the signature was invalid,or it was not signed with an iPhone distribution certificate这样的错误提示时,如果你已经确认已经正确地使用了appstore的签名,请检查一下Building Setting里的Code Signing Entitlements的选项,这里是不需要填入任何文件的路径的,这是appstore和AD_HOC的最大不同。