本文主要介绍使用swift语言制作framework
Demo:https://github.com/Gamin-fzym/CMSDK
一、创建工程
1.创建目录
这里我创建了一个“CMSDK”目录
2.打开Xcode新建workspace放入CMSDK目录
这里命名为“CMSDK”


3.打开CMSDK.xcworkspace新建SDK工程放入CMSDK目录
这里还是命名为“CMSDK”



将创建的SDK工程添加到CMSDK.xcworkspace
4.打开CMSDK.xcworkspace新建测试工程放入CMSDK目录
这里命名为“CMSDKTest”



这里同样要将测试工程添加到CMSDK.xcworkspace
至此工程创建完成,打开CMSDK.xcworkspace可以看到如下目录。

二、创建Target关联SDK
1.创建AggreGate文件
这里命名为“CMSDKAggregate”



2.对“CMSDKAggregate”添加dependencies

3.对“CMSDKAggregate”添加脚本

自动生成framework的脚本内容如下,可直接复制。
-
#!/bin/sh
-
#要build的target名
-
TARGET_NAME=
${PROJECT_NAME}
-
if [[
$1 ]]
-
then
-
TARGET_NAME=
$1
-
fi
-
UNIVERSAL_OUTPUT_FOLDER=
"${SRCROOT}/${PROJECT_NAME}/"
-
-
#创建输出目录,并删除之前的framework文件
-
mkdir -p
"${UNIVERSAL_OUTPUT_FOLDER}"
-
rm -rf
"${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
-
-
#分别编译模拟器和真机的Framework
-
xcodebuild -target
"${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration
${CONFIGURATION} -sdk iphoneos BUILD_DIR=
"${BUILD_DIR}" BUILD_ROOT=
"${BUILD_ROOT}" clean build
-
xcodebuild -target
"${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration
${CONFIGURATION} -sdk iphonesimulator BUILD_DIR=
"${BUILD_DIR}" BUILD_ROOT=
"${BUILD_ROOT}" clean build
-
-
#拷贝framework到univer目录
-
cp -R
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework"
"${UNIVERSAL_OUTPUT_FOLDER}"
-
-
lipo
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"
-
-
-
#合并framework,输出最终的framework到build目录
-
lipo -create -output
"${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}"
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"
"${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"
-
-
#删除编译之后生成的无关的配置文件
-
dir_path=
"${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
-
for file
in
ls
$dir_path
-
do
-
if [[
${file} =~
".xcconfig" ]]
-
then
-
rm -f
"${dir_path}/${file}"
-
fi
-
done
-
#判断build文件夹是否存在,存在则删除
-
if [ -d
"${SRCROOT}/build" ]
-
then
-
rm -rf
"${SRCROOT}/build"
-
fi
-
rm -rf
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator"
"${BUILD_DIR}/${CONFIGURATION}-iphoneos"
-
#打开合并后的文件夹
-
open
"${UNIVERSAL_OUTPUT_FOLDER}"
三、配置SDK
1.配置SDK支持的最低版本

2.配置SDK支持的设备

3.配置SDK为静态库

4.配置Enable Bitcode为NO

5.Other Linker Flags中添加-ObjC

6.配置Build Active Architecture Only

7.配置Perform Single-Object Prelink为YES

8.Edit Scheme中配置Build Configuration为Release

四、开发SDK
1.开发具体的功能

注意:Swift开发时,需要将要公开出去的方法、属性、变量使用public或者open修饰。

2.通过Bundle管理资源文件
还可以通过xcassets管理,也可以自己创建一个Resources目录来管理。
a.创建Bundle文件
这里命名为“CMSDK.bundle”



b.添加文件

c.使用文件
-
//
-
// UIImage+BundledImage.swift
-
// CMSDK
-
//
-
// Created by hivpn on 30/1/2023.
-
//
-
-
import UIKit
-
-
extension
UIImage {
-
-
static
func
bundledImage(
named
imageName:
String) ->
UIImage {
-
// 图片放在bundle的images中
-
var bundleName
=
"CMSDK.framework/CMSDK.bundle/images/\(imageName)"
-
if
let image
=
UIImage(named: bundleName) {
-
return image
-
}
-
// 图片放在bundle中
-
bundleName
=
"CMSDK.framework/CMSDK.bundle/\(imageName)"
-
if
let image
=
UIImage(named: bundleName) {
-
return image
-
}
-
// 图片放在资源目录
-
let fileName
=
"CMSDK.framework/\(imageName)"
-
if
let image
=
UIImage(named: fileName) {
-
return image
-
}
-
return
UIImage()
-
}
-
-
}

3.设置SDK想要暴露给外部访问的头文件


4.使用真机(arm64)编译生成framework文件
进入Product -> Show Build Folder in Finder,在Release-iphoneos目录下可以找到CMSDK.framework。


5.依赖第三方SDK(可选)
a.cd到SDK工程目录pod导入第三方SDK

b.进入SDK工程目录通过CMSDK.xcworkspace打开工程

c.调用第三方SDK

d.设置Pods_CMSDK.framework的Embed类型为Do Not Embed(不要嵌入)

e.编译成framework
在这里我们会发现,开发SDK时依赖的SVProgressHUD.framework并不会被包含到我们的CMSDK.framework中。当然,其它项目在使用我们的CMSDK.framework时需要依赖SVProgressHUD.framework。

五、测试
1.CMSDKTest配置
a.配置Enable Bitcode为NO

b.Other Linker Flags中添加-ObjC

c.Edit Scheme配置Build Configuration为Release


2.CMSDKTest导入CMSDK.framework
将framework拖入项目中,在Copy Bundle Resources中添加framework。

3.测试能否正常访问SDK

六、参考
Swift framework制作: https://github.com/wangjialePro/PlayerListSDK
iOS优雅开发SDK详细教程:https://www.jianshu.com/p/398d015b1b2e
swift framework 中加载图片:https://www.jianshu.com/p/01c5edcf5856
iOS - framework开发资源图片如何配置:https://www.jianshu.com/p/5a3307b8bc2e
转载:https://blog.csdn.net/u012881779/article/details/128801353
