最近作了一個東西,在打包ipa文件時遇到了各類問題,糾結了我好幾天。android
因爲我一直是作android的,在打包時覺得ios打包也和android同樣:用IDE(eclipse)生成一個簽名證書,而後打包。事實證實ios的打包比這複雜多了。下面介紹一下我遇到的各類問題。ios
1.證書問題xcode
要打包ipa首先須要設置code sign identity,一個應用須要打包至少須要三個要素:證書,APP ID,還有一個容易被忽略的provisioning profile。app
證書的申請流程處處均可以找到,這裏只簡單介紹一下,首先使用鑰匙串建立一個certSigningRequest文件,而後登陸apple developer的ios developer申請證書,將certSigningRequest文件上傳,生成一個證書,將它下載下來便可。eclipse
接着是APP ID,仍然是到apple developer建立,通常是公司域名的倒寫加應用名。ide
我以前一直覺得到這裏就結束了,就archive,結果每次都悲劇。問題出在provisioning profile上,以前一直不理解爲何要這個東西,當我建立以後就知道它存在的理由了。你們知道應用在發佈以前,要在沒有越獄的真機上測試的話,就要將 機器UDID添加到你的開發者賬號中去,而一個應用如何知道你的開發者賬號裏面添加了哪些UDID呢?就是經過provisioning profile,它也是經過apple developer官網建立,在建立時會讓你選擇類型,打包ipa測試的話就選擇AD HOC,記得添加UDID,建立後下載下來生成mobileprovision文件,雙擊運行即添加到資源庫中去,而xcode在讀取你的系統裏的證書時 其實是在查找資源庫裏面的provisioning profile。provisioning profile包含了證書,APP ID和UDID列表,archive後這些信息會被加入ipa中。測試
2."file not found"ui
在archive時會碰到一個蛋疼的問題,就是明明在模擬器編譯運行都正常,可是打包ipa時卻報一個找不到頭文件的錯,這是因爲直接編譯時使用的是你的 系統的頭文件目錄,而archive時使用的時SDK下的頭文件目錄,通常狀況下這二者時一致的,可是有些特殊庫的頭文件,如libxml,在系統下 /usr/include/libxml2是包含在頭文件自動搜索範圍內的,而SDK中這個目錄不在自動搜索範圍內,因此就會報一個"file not found"。spa
解決方式就是在編譯參數裏面添加一個頭文件搜索目錄,工程->build setting,搜索header search paths,添加你須要手動添加的頭文件目錄,如/usr/include/libxml2。code
3.顯示archive success,可是organizer不能自動彈出,手動打開也看不到剛剛打的包,或者沒有share按鈕可點
在介紹這個問題以前,我首先要吐糟一下某水果公司,這個問題足足浪費了我一個下午的時間,原本我能夠不用加班的,當解決以後我巴不得跑到米國把某水果公司給炸了。
遇到這種問題可能有各類不一樣的緣由,可是我敢說90%以上都是由於同一個緣由,而這個問題的解決方法也超簡單,工程->build setting,搜索deployment,找到skip install項,將其改爲NO,target->build setting,搜索deployment,找到skip install項,將其改爲NO,網上找到一些資料說target下要改爲YES,可是我真實操做下倒是改爲NO才生成ipa的,說實話,我並不理解它的 原理,各位看官能夠YES和NO都試一下。
目前遇到的比較頭疼的問題就這三個,之後遇到新的再更新。