iOS打包靜態(tài)庫(kù)的流程在網(wǎng)上一搜一大把,但是很少看到同時(shí)把資源文件帶上的(畢竟打包的靜態(tài)庫(kù)一般都專做業(yè)務(wù)邏輯,很少摻雜視圖)。正好這次遇到了這個(gè)問(wèn)題,就來(lái)說(shuō)說(shuō)目前打包過(guò)程中遇到的坑吧
資源文件不參與編譯的問(wèn)題
雖說(shuō)這是廢話。。。但是還是提提,資源文件不會(huì)編譯成二進(jìn)制的文件(如果可以那就可以偷懶了,然而這樣包肯定又更大,真是難以取舍)。即使在項(xiàng)目中的Copy Bundle Resource中強(qiáng)行弄進(jìn)去也不會(huì)有任何變化。。。然后我能想到的辦法就只有一個(gè)了,打包成bundle文件
打包成bundle之后圖片找不到的問(wèn)題
其實(shí)。。。這個(gè)正常的想想,光是打包之后代碼也不改,怎么找的到原來(lái)的圖片。。。原本我的代碼里加載image用的是imageNamed
方法,將資源文件打包之后就不得不在圖片名前加個(gè)bundle的路徑了
xxx.png -> xxx.bundle/xxx.png
為了方便就寫了個(gè)宏,都替換成這種模式
#define IMG_PATH(x) [NSString stringWithFormat:@"%@/%@",IMG_BUNDLE,x]
但是,開(kāi)發(fā)的時(shí)候,資源文件都會(huì)分文件夾。。。直接這樣打包,好的,也是找不到,所以用這種方法,需要在打包成bundle的時(shí)候,把文件夾全部去掉,直接把文件全部拖到同一個(gè)文件夾下
這里怕有人不知道做個(gè)提示:bundle文件可以直接將文件夾名字改成xxx.bundle就自動(dòng)打包了,不需要用xcode里面的bundle生成
打包跟開(kāi)發(fā)項(xiàng)目分離,代碼更新后都要重新拖代碼
這個(gè)。。。嗯,因?yàn)轫?xiàng)目在開(kāi)發(fā)階段,好多問(wèn)題都要修改,然后這邊改動(dòng)了,打包的工程里的代碼也要拖,就覺(jué)得好麻煩- -于是介紹下我的處理方法,大神們勿噴。我的處理辦法是在開(kāi)發(fā)的項(xiàng)目中添加個(gè)target,選擇framework文件,這樣就在工程里面有個(gè)framework的子工程了,然后手動(dòng)將需要編譯成framework的.m文件和頭文件分別添加到Complie Sources和Headers中。由于我的項(xiàng)目里有用到pod引用第三方庫(kù),所以在framework的配置中是稍微麻煩了一點(diǎn),這個(gè)可以通過(guò)新建的framework工程中引入pod,將pod配置抄過(guò)來(lái)(坑點(diǎn)就是別忘記pod定義的user-defined)
然后由于兩個(gè)工程共用了文件,所以也添加了宏#define PROJECT_IS_FRAMEWORK 0
(感覺(jué)應(yīng)該有其他方法判斷,但是沒(méi)去找),打framework的時(shí)候就修改一下。
這個(gè)方法唯一坑的就是,添加文件的時(shí)候,需要在framework的target中手動(dòng)添加文件,其余的還好。
只用打release包就可以了吧
這個(gè)我也不太確定,不過(guò)反正debug包也能跑的樣子,那么干脆只打release就好了