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