本文主要介绍使用swift语言制作framework
Demo:https://github.com/Gamin-fzym/CMSDK
这里我创建了一个“CMSDK”目录
这里命名为“CMSDK”
这里还是命名为“CMSDK”
将创建的SDK工程添加到CMSDK.xcworkspace
这里命名为“CMSDKTest”
这里同样要将测试工程添加到CMSDK.xcworkspace
至此工程创建完成,打开CMSDK.xcworkspace可以看到如下目录。
这里命名为“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}"
注意:Swift开发时,需要将要公开出去的方法、属性、变量使用public或者open修饰。
还可以通过xcassets管理,也可以自己创建一个Resources目录来管理。
a.创建Bundle文件
这里命名为“CMSDK.bundle”
b.添加文件
c.使用文件
//
// UIImage+BundledImage.swift
// CMSDK
//
// Created by hivpn on 30/1/2023.
//import UIKitextension 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()}}
进入Product -> Show Build Folder in Finder,在Release-iphoneos目录下可以找到CMSDK.framework。
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。
a.配置Enable Bitcode为NO
b.Other Linker Flags中添加-ObjC
c.Edit Scheme配置Build Configuration为Release
将framework拖入项目中,在Copy Bundle Resources中添加framework。
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