Xcode打包踩過的那些坑

一、file was built for archive which is not the architecture being linked (armv7s)

項目是基於cocos2d-x綁定lua進行開發的,需要引用liblua.a靜態庫,編譯的時候報上面的錯。需要將liblua項目中的build Settings配置項中的“Build Active Architecture Only”改爲YES  (是否只編譯當前適用的指令集)

關於這個屬性,直接從網上轉載過來(關於Build Active Architecture Only屬性)

這個屬性設置爲yes,是爲了debug的時候編譯速度更快,它只編譯當前的architecture版本。 而設置爲no時,會編譯所有的版本。 這個是設備對應的architecture: armv6:iPhone 2G/3G,iPod 1G/2G armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G armv7s:iPhone5, iPod5

編譯出的版本是向下兼容的,比如你設置此值爲yes,用iphone4編譯出來的是armv7版本的,iphone5也可以運行,但是armv6的設備就不能運行。

目前IOS的指令集

armv6    iPhone、iPhone2、iPhone3G、第一代和第二代iPod Touch

armv7    iPhone4、iPhone4S

armv7s   iPhone5、iPhone5C

arm64    iPhone5S

二、宏定義

c++代碼中很多地方是通過宏控制的,所有對於宏的檢查要很仔細。Debug、Release二個版本的宏定義是不一樣的,要注意有所區別。所以這裏定義出了問題,那自然build測試時跟預期的不一樣,而且很難定位問題

三、Search Path

這裏很容易出錯,比如接入第三方SDK時需要引入相應的.framework文件。這裏的路徑最好使用相對路徑(比如使用${SRCROOT}),以避免切換另外一臺mac時用戶名不一致導致無法編譯,需要重新修改路徑的問題。

頭文件,這裏記得補全,不然編譯時就會報找不到頭文件…

最後一個Library Search Paths比較坑,被這個坑了比較長時間。我使用workspace跟直接打開xcodeproject生成的靜態鏈接庫路徑不一樣,然後切換的時候,在這裏並未刪除相應的路徑,導致一直優先從舊的.a庫中查看,結果可想而知。無論我怎麼去清理、重新編譯,都無法看到改動後的效果

…/xx.a

../xx/xx.a

它會優先找上面的xx.a,然後再找xx下的xx.a。如果在xx.a中找到對應的方法,就不再往下查找了,所以這裏就有坑了…

一般這裏會按照這樣的格式輸入路徑“$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)”

$(SRCROOT)宏代表您的工程文件目錄,$(EFFECTIVE_PLATFORM_NAME)宏代表當前配置是OS還是simulator

四、LLVM的編譯參數

一般都採用默認的,有一些特殊的SDK,則需要修改相應的選項。

還有一個就是Other Linker Flags的參數設置,根據需要進行設置(點擊查看Other Linker Flags詳解>>)

五、向工程中添加文件時的選擇

Create groups for any added folders 與 Create folder references for any added folders

上面這張圖已經描述比較清楚了,如果想了解更詳細的,可以參數這裏:Cocos2d-x Create groups for any added folders 與 Create folder references for any added folders

Copy items into destination group’s folder一般在debug時是不會選中的,多數情況下我們使用"references”較爲,創建組的方式,添加的文件(如cpp)會被編譯。

暫時就想到這幾個坑了,還有很多坑,有空再一併整理出來。新手上路,總歸遇到的問題會比較多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章