[Swift]SDK开发
创始人
2024-05-21 08:16:12
0

本文主要介绍使用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 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()}}

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

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...