1、創(chuàng)建一個Framwork

1
2、選擇語言為Swift

2
3、然后就看到這樣子的工程列表

3
4、設(shè)置為靜態(tài)庫

image.png
5、添加腳本

image.png
6、編寫腳本

image.png
腳本代碼粘貼進去
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi
7、設(shè)置最低支持版本

image.png
8、新建一個文件

4
9、編寫如下代碼
import UIKit
class PQTest: NSObject {
class func sayHello(){
print("Hello Framework")
}
}
10、分別選擇模擬器和真機編譯一次

image.png
11、然后在創(chuàng)建一個測試程序
File - new - target

1

2

3
11、導(dǎo)入框架
進入新建的那個測試程序,進入ViewController

image.png
12、到這里你就會發(fā)現(xiàn)死活都用顯示不了.....
因為你沒有加public
然后回到你的Framework中的PQTest這個文件中,修改代碼如下:
public class PQTest: NSObject {
public class func sayHello(){
print("Hello Framework")
}
}
然后編譯一次(如果你是用模擬器測試就編譯模擬器包,如果是你真機就選擇真機)
13、回到ViewController就可以使用了
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
PQTest.sayHello()
}
}
14、上面是針對在Swift工程中使用,如果你在OC工程或者混編工程中使用的畫還需要
-
@objc 這個很重要
15、我們定義一個 enum
enum PQTestType: Int {
case a
case b
case c
case d
}
正常情況下的Swift中的enum這樣子寫就可以,但是如果你需要在OC項目中使用,就需要加上 @objc public
16、如果想要剛才的內(nèi)容全部支持在OC項目中調(diào)用
@objc public enum PQTestType: Int {
case a
case b
case c
case d
}
public class PQTest: NSObject {
@objc public class func sayHello(){
print("Hello Framework")
}
}
你最終的代碼如下,只有加了@objc 在會在 '項目名'-Swift.h中進行橋接,這個時候你可以調(diào)用。

image.png
中查看

image.png
最后在OC中調(diào)用如下

image.png
2017-12-25 更新:
如果你在Swift的Framework中要使用OC的文件
首先橋接文件是不支持的,如果你使用了橋接文件的話會報如下錯誤:
<unknown>:0: error: using bridging headers with framework targets is unsupported
但是你又想使用怎么辦。
- 1、創(chuàng)建Objective-C的文件
- 2、在Framework中自帶的頭文件導(dǎo)入#import <XXX/OC文件.>
舉例:framework名稱 AA
OC文件名為: BBBB
所以你要在AA.h文件中導(dǎo)入#import <AA/BBBB.h> -
3、公開他
image.png
更新2018年05月07日 解決Swift框架在OC項目里面調(diào)用的問題
- 問題:
library not found for -lswiftSwiftOnoneSupport for architecture arm64 - 解決方案:
在OC的項目中創(chuàng)建一個空的Swift文件即可
