十、關於第三方庫找不到文件的提示錯誤。簡單補充下吧,別走彎路。
首先你要肯定這個錯誤產生的緣由:大體分兩種,
一:你作的項目缺失文件,百度下,加入就解決了;
二:你引入的第三方框架發生找不到文件錯誤:這樣的結果分兩種:
2、一:開發第三方框架的程序人員沒有作好本身的框架。尤爲是在生成框架的時候,沒有設置好自身屬性。致使使用者用的時候出現找不到文件錯誤,最後迫使使用者不得不去改本身的工程配置。
2、二:你在引入第三方框架的時候,少引用了文件。
好了,你分析完後就好辦了,咱們作的這個靜態庫沒有設置本身的兼容屬性,因此就照成了這種錯誤。在iPad Retina的模擬器上跑就正常,換成其餘的模擬設備就報錯。因此改下其屬性就能解決。
Target: -> Build Settings -> Architectures -> Build Active Architecture Only 全改爲NO;
《插不了圖片了。樓下8樓找吧》
分析緣由:
在咱們生成靜態庫的時候,咱們選擇的是iPad Retina。也就是說這個靜態庫在引用的時候,必須也是iPad Retina。不然Xcode編譯器會找不到文件所在。
你們能夠實驗下,在iPad Retina下導出靜態庫,在其餘工程使用的時候,若是用iPad Retina跑就沒有錯誤。若是選擇其餘設備就會提示找不到文件。
兼容所有設備解決方法:改下靜態庫的兼容屬性。Target: -> Build Settings -> Architectures -> Build Active Architecture Only 全改爲NO;
Build Active Architecture Only
這個屬性設置爲yes,是爲了debug的時候編譯速度更快,它只編譯當前的architecture版本,因此會報錯編譯不到文件,出錯("_OBJC_CLASS_$_xxxxxx", referenced from:)
而設置爲no時,會編譯全部的版本,這樣就解決編譯出錯的問題了。
這個是設備對應的architecture:
armv6:iPhone 2G/3G,iPod 1G/2G
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G
armv7s:iPhone5, iPod5
arm64:iPhone5s
編譯出的版本是向下兼容的,好比你設置此值爲yes,用iphone4編譯出來的是armv7版本的,iphone5也能夠運行,可是armv6的設備就不能運行。
真機版和模擬器版的庫合併解決方法:在framework文件夾下,你會看到一個白板文件,這個文件名和的的framework靜態庫名相同,只是沒有後綴名。 這個文件在被引入到其餘工程時候是看不見的。只有在Show In Finder下能看到。
打開終端,輸入命令:中文換成你的真實目錄。
lipo -create 「……真機/目錄/那個白板文件「 "……/模擬器/目錄/那個白板文件" -output 「…..另保存的/目錄/文件」
合併好的新文件,覆蓋掉原來的framework中的文件便可。這個framework就會支持全部設備和真機、模擬器所有版本。
其實這個方法就是用*.a文件的合併方法。在framework同樣有效。framework中的白板文件就好像*.a文件同樣。
九、關於xib的引用。一樣根上邊建立framework的方法同樣,只是設置不一樣。我加了一個名字爲:Resource.bundle靜態資源文件。
這個樣子:
Target:並選擇 Build Settings -> Architectures -> Base SDK 改成Latest iOS(ios 8.1)
Target:在 Deployment 下,
Target:將 「Mac OS X Deployment Target」改成」Compiler Default」,
Target:將 「Targeted Device Family」改」iPhone/iPad」,
Target:將 「iOS Deployment Target」,改成 「iOS 7.0」:
9.一、在MyViewController.m文件中編寫下。別忘了在*.h裏寫上接口。
9.二、而後就是給新加的資源文件拖拽下。
再選中工程文件,拖拽後的樣子(就是轉靜態庫的工程)。
爲了方便查看,我把MyViewController.xib背景塗成了藍色,加了個紅按鈕。直接:command+R。一切運行正常。
9.三、而後把這兩個文件都複製出來。
放到其餘工程裏,運行。是否是很簡單。
十、加個圖片。怎麼加不解釋來。先加一個不用管理器管理的圖片。
工程command+R。。一切正常。
10.一、其餘工程引用靜態庫,再跑。正常。嘿嘿,是否是多了個圖片文件。