以下,將創建一個Swift項目,然后引入3個庫:
- Snappy 簡化autolayout代碼的庫
- Alamofire HTTP網絡庫,AFNetworking作者寫的
- SDWebImage 圖片加載,objc項目,通過頭文件bridge方式供swift使用
其中,前兩個是Swift的庫,SDWebImage
是Objc的庫。
源代碼見:https://github.com/MarshalW/SwiftWith3rdLibDemo
項目跑起來是這個樣子:
做下面步驟之前,需要讓自己的項目是git項目。
使用Snappy庫
Snappy庫,用於簡化AutoLayout布局的代碼。
和Objc項目不同,Swift項目沒有類似CocoaPods的庫依賴工具,而是使用git的submodule引入庫。目前來看更方便使用。
1. 創建submodule
在當前項目的目錄下執行:
1
git submodule add https://github.com/Masonry/Snappy.git
執行完會看到多了個Snappy目錄。
這樣的項目,如果git共享給其他人,他們除了clone
項目以外,還需要:
1
git submodule update --init --recursive
2. 將Snappy.xcodeproj加入到Xcode項目中
如下圖所示,直接將文件拖拽過去即可:
3. 將Snappy.framework設置到項目中
Xcode打開項目的General
,點擊+
然后,選擇Snappy.framework
,加上它。
4. 編寫代碼測試
如果能正常import
,Xcode不報錯,就應該沒有問題了:
1
import Snappy
寫了個簡單的代碼運行也沒有問題:
override func viewDidAppear(animated: Bool) {
println("super view: \(imageView.superview)")
let padding = UIEdgeInsetsMake(100, 100, 0, 0)
imageView.snp_makeConstraints { make in //autolayout
make.edges.equalTo(self.imageView.superview!).with.insets(padding)
return
}
}
使用SDWebImage庫
SDWebImage庫是Objc編寫的。引入的方式和Swift有所不同(從第3步開始)。
1. 創建submodule
這一步還是省不了的:
1
git submodule add https://github.com/rs/SDWebImage.git
2. 將SDWebImage.xcodeproj加入到Xcode項目中
3. 設置Target Dependencies
在這里:
加入:
看起來是這樣:
4. Link Binaray With Libraries
找到這里:
加入ImageIO.framework(iOS自帶的),以及libSDWebImage.a
5. 設置Other Linker Flags
在這里設置-ObjC
設置完了的樣子:
6. 創建Bridge頭文件
就是創建一個普通的頭文件,一般命名為項目名-Bridge-Header.h
7. 設置Bridge頭文件
找到這里:
雙擊箭頭標示的地方,會彈出文本框,將頭文件加進去即可。
我開始的時候是參照stackoverflow的回答,將頭文件直接拖拽進去,發現用的是絕對路徑。可以在拖拽后修改一下:
引入第三方庫的常見問題
目前主要碰到的問題是各個Swift第三方庫Deployment Target
版本不一致。比如Alamofire
是8.0,而Snappy
是7.0,需要讓它們的版本是一致的。
會有類似這樣的報錯:
1
ld: embedded dylibs/frameworks are only supported on iOS 8.0 and later ...