[Swift]SDK开发

news2024/11/17 15:50:12

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

五、测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

06 CSS-盒子模型【尚硅谷JavaWeb教程】

06 CSS-盒子模型【尚硅谷JavaWeb教程】 JAVAWEB的学习笔记 学习视频来自:https://www.bilibili.com/video/BV1AS4y177xJ/?vd_source75dce036dc8244310435eaf03de4e330 不同的浏览器导致前端展示页面不一样,盒子的大小的不同。(所以前端要考虑…

奇迹mu开服教程

奇迹mu开服教程:开服服务端的架设及开服注意事项服务器推荐奇迹开服需要准备什么?开服大概成本分析奇迹MU商业服务端版本:1.02W、1.03H、1.03K、S6EP3、S7EP2、S9EP2;HE网站系统:绑定域名授权,功能可定制&a…

Jenkins部署项目一(物理机器部署SpringBoot项目)

一、Jenkins部署SpringBoot项目 设备:MacOS 准备工作 1.已安装java开发工具包JDK 2.已安装依赖管理工具Maven 3.已安装代码版本控制工具Git 4.已安装Jenkins learn-moon代码地址:https://github.com/BillDavidup/learn-moon SSH: gitgithub.com:Bil…

【学Vue就跟玩一样】如何使用集中式状态管理的Vuex以及如何模块化编码+命名空间

1.vuex是什么一个专门在Vue中实现集中式状态管理的一个Vue插件,可以对vue应用中多个组件的共享状态进行集中式的管理(读取/写入),也是一种组件间通信的方式,并且适用于任意组件间通信2.什么时候使用Vuex1.多个组件依赖于同一状态2.来自不同组件的行为需要…

Goland入门指南(使用Goland创建并运行项目)

在文章《Goland下载和安装》详细介绍了 Goland 的安装和破解,本节我们来介绍一下怎么使用 Goland 来创建并运行一个项目。 创建项目 首先,在“文件”菜单中找到“New”,并在下一级菜单中选择“Project”来创建一个新项目。 为项目选择一个…

【vim】C语言代码提示

前言 常见的C语言提示插件是YouCompleteMe,这个插件安装比较麻烦,在这推荐一款coc.nvim这个插件,github仓库地址:https://github.com/neoclide/coc.nvim/ 下面是安装步骤。 一、安装 nodejs 1、终端命令安装 curl -sL instal…

SpringMVC DispatcherServlet源码(2) 扫描Controller创建HandlerMapping流程

Spring MVC向容器注册一个RequestMappingInfoHandlerMapping组件,他会扫描容器中的Controller组件,创建RequestMappingInfo并注册HandlerMethod映射关系。 本文将阅读Spring MVC源码分析上述流程。 RequestMappingHandlerMapping组件 Creates Request…

java ssm校园兼职发布与互动平台的设计与实现

该系统基于B/S即所谓浏览器/服务器模式,应用JSP技术,选择MySQL作为后台数据库。系统主要包括个人中心、用户管理、企业管理、企业信息管理、兼职信息管理、职位申请管理、职位类型管理、交流中心、留言反馈、系统管理等功能模块。 使用校园兼职发布与互动…

JavaWeb:会话技术之Session

Cookie已经能完成一次会话多次请求之间的数据共享,之前我们还提到过Session也可以实现,那么: 什么是Session?Session如何来使用?Session是如何实现的?Session的使用注意事项有哪些? 1. Sessio…

SpringCloud学习笔记 - 熔断降级 - Sentinel

1. Sentinel熔断降级概述 1.1. 熔断降级要解决的问题 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如&…

海康Visionmaster-VM权限设置、软件设置、方案设置和运行策略

权限设置 权限设置可设置是否配置管理员、技术员和操作员权限和配置密码,并设置不同角色人员的权限。 权限导入导出可对当前软件权限设置模块的配置以txt格式文档进行导入或导出。 打开启用加密时,需设置管理员密码。设置完成后,软件以管理员…

如何把Node项目部署到服务器上

1. 如何合理选购一台服务器 对于服务器的选择,我们主要有以下几种选择: 1. 阿里云; 2. 腾讯云; 3. 华为云; 4. 亚马逊云; 国内用户如果没有特殊需求可以选择前三种,这里我阿里云举例&…

【Vue】vue-devtools调试工具安装和配置

1. 安装 vue-devtools 调试工具vue 官方提供的 vue-devtools 调试工具,能够方便开发者对 vue 项目进行调试与开发。Chrome 浏览器在线安装 vue-devtools :https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpdFi…

RPA自动办公02——Uibot界面元素选择

继续RPA-Uibot的简单使用,本次带来RPA自动点击网页。 当然官方教程更加详细:界面元素自动化_UiBot开发者指南 按照书上的教程,点击一个表格,在右边拖拽命令,然后选择元素就可以了: 这个表格在官方文档上有…

为什么要开发SpringBoot?

Spring配置繁琐 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多 XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基…

计算机图形学 第4章 多边形填充

目录前驱知识多边形的扫描转换有效边表填充算法原理边界像素处理原则怎么算交点有效边桶表与边表桶表表示法边缘填充算法填充过程在这里插入图片描述区域填充算法/种子填充算法种子填充算法扫描线种子填充算法 (更有效)前驱知识 了解扫描转换的基本概念…

九龙证券|兔年行情将打响,A股2月上涨概率最高

兔年行情行将正式打响,迎接投资者的会否是 “兔”飞猛进的行情呢?证券时报数据宝带您一起透视兔年股票上涨概率。 A股新年后上扬概率高 从近10年A股新年后的市场体现来看,头几个买卖日大概率上涨。 数据宝统计,曩昔10年&#xf…

国内在线图表工具,你能说出几个?

之前写过很多篇在线图表、数据分析处理类工具的内容,但都是针对单个问题写的,没有将其整合起来,今天就借着这个问题,做个国内在线图表工具的合集。 一共5大类,每一类各介绍一个代表性工具,全文较长&#x…

【c语言进阶】文件操作知识大全上

🚀write in front🚀 📜所属专栏:> c语言学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是…

15. XML解析

1. 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language)。 a. XML 是一种很像HTML的标记语言。 b. XML 的设计宗旨是传输数据,而不是显示数据。 c. XML 标签没有被预定义。您需要自行定义标签。 d. XML 被设计为具有自…