參考文章:http://my.oschina.net/leejan97/blog/284193
首先不得不說,這篇文章寫得挺好的,但是還是讓我廢了一番功夫,忽略了一個問題,現在我就寫下來創建靜態庫的步驟,以備自己將來翻閱,也希望有助于像我一樣的新手,可以節省一些時間。
1、創建Static Library,點擊File--> New --> Target(如圖1.1和1.2)
2、創建了靜態庫Static Library之后,Xcode自動為我們創建了JJShakeText.h/.m文件(如圖2.1)
3、編譯項目,生成對應的靜態庫.a文件(我的問題就是出現在這一步,Mark一下)
編譯的時候,記得選上面的項目是JJShakeText(當然你的是什么名字的,就選對應的就好)
然后用模擬器環境和真機環境都編譯一下,紅色的libJJShakeText.a文件就變成黑色了(如圖3.2 和 3.3)
4、合并靜態庫
針對真機和模擬器的靜態庫文件只能在一個平臺下面使用,好在我們可以將真機和模擬器上面的靜態庫文件合并成一個在真機和模擬器都可以使用的靜態庫文件,通過在終端輸入命令即可完成該目的,
完整的命令:
lipo -create /Users/doudou/Library/Developer/Xcode/vedData/JJPickView-eqviycrqcwweiretrodyzdijhulx/Build/Products/Debug-iphoneos/libJJShakeText.a /Users/doudou/Library/Developer/Xcode/DerivedData/JJPickView-eqviycrqcwweiretrodyzdijhulx/Build/Products/Debug-iphonesimulator/libJJShakeText.a -output /Users/doudou/Desktop/libJJShakeText.a
這個是自己的文件路徑,改成相應的就好了
這里可能出現,真機可以,但是模擬器不能使用,或者只能使用一個的情況,現在我分析一下原因和解決方法。
然后通過下面命令來查看libMtimeLibrary.a信息
命令:lipo -info libMtimeLibrary.a
顯示:
cashmatoMacBook-Pro:Debug-iphonesimulator cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: i386
i386是mac上的架構。
繼續通過命令來查看? lipo -info libMtimeLibrary.a,
顯示:
cashmatoMacBook-Pro:Debug-iphoneos cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: armv7
armv7是iOS上的架構。
到這里我們也明白了,為什么一個在真機上可以使用,一個只能在模擬器上使用了吧!
最后我們要做的就是要讓這個libMtimeLibrary.a文件同時有i386和armv7信息,這樣就是一個通用的靜態庫文件了。
問題是還會報錯,還是會報下面的錯,或者是x86_64,原因是,需要用模擬器iPhone 5 來生成有i386 的.a文件,用模擬器iPhone 5s 來生成有x86_64的.a文件,用真機編譯來生成armv7的.a文件,好了,現在將3個文件用上述的合成方法,分兩次合成到一起,再用“lipo -info +路徑”查看一下,就是看到新的.a文件包含:armv7 i386 x86_64了(如圖4.4)
5、使用靜態庫文件
這時候我們就可以使用自己創建、編譯生成的靜態庫文件了,將UITextField+Shake.h文件和桌面上面的liJJShakeText.a文件拖到想要使用的項目中,如下圖的目錄結構,(如圖5.1)
6、現在已經可以正常使用了.
其實參考文章寫得挺好的,我只是在第一步和第三步有點不一樣的地方,我就重新寫了一下,畢竟版本不同了,給需要的節省一丁丁時間也好。