Android和IOS的app发布的流程有一个相同之处,就是都须要先将编译好的app签名,而后上传到market里,但二者的复杂度是冰火两重天。Android能够手动经过集成在eclipse里的工具进行签名,或者能够用ant进行自动化签名。但IOS app的发布过程很是的痛苦。html
发布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以上的能够看这里:ios
http://useyourloaf.com/blog/2010/12/23/creating-iphone-ad-hoc-distribution-builds.html。xcode
抛开发布流程的复杂度不说,其中有几个关键步骤是很是值得分享的。app
一、 在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。eclipse
二、 当在项目中须要用到apple的推送功能时,须要增长一个Entitlements.plist文件,经过xcode的添加文件向导能够向项目里添加这个文件。若是是须要使用ipa格式发布,当在Archive编译完成后,点击validate或share的时候,若是出现如下错误:this bundle is invalid. the application-identifier entitlement isnot formatted correctly,请将对应的Entitlements.plist文件的内容按下图填写。iphone
三、 若是是要想发布到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的最大不一样。ide