教你一步一步开发iOS私有SDK 到并上传到cocoapods

2023-05-16

1、 需求

我们要提供一个iOS 私有 SDK, 对方可以通过cocoapods安装, 并且只能看到头文件

2、大致流程

  • 使用Xcode创建一个framework工程, 在里面编写你需要提供的功能
  • 创建podspec文件, 依赖这个framework, 然后上传到Cocoapods.

3、具体流程

如果我们单独创建一个framework工程, 如果有需求修改每次都要导出framwork在demo工程中调试, 这就很麻烦,所以今天创建一个framework+demo的混合工程, 在一个工程中包含framework工程+demo工程+Pods工程。结构如下:
在这里插入图片描述

混和工程创建步骤

demo github地址

Step1: 创建Demo工程, 取名为MySDKDemo

  • 创建完成加入Podfile文件, 并执行Pod install
platform :ios, '9.0'
target 'MySDKDemo' do
end

Step2: 创建framework工程, 取名为MySDK

在这里插入图片描述

Step3: 关联项目

  • 把创建好的MySDK移动到MySDKDemo下面
    在这里插入图片描述
  • 然后把MySDK工程文件拖进项目
    在这里插入图片描述
  • 拖入之后
    在这里插入图片描述

Step4: 配置Podfile

 platform :ios, '9.0'
 
#这里需要添加
workspace 'MySDKDemo.xcworkspace'

target 'MySDKDemo' do
    # Comment the next line if you don't want to use dynamic frameworks
    use_frameworks!
    # Demo工程依赖的第三方, 如果和SDK依赖的一致, 则Pod install的只会安装一份
    pod 'SVProgressHUD'
    pod 'AFNetworking'

end

target 'MySDK' do
    #需要添加SDK路径,
    project './MySDK/MySDK.xcodeproj'
    # MySDK依赖 SVProgressHUD 和 AFNetworking
    pod 'SVProgressHUD'
    pod 'AFNetworking'
end
  • cd 到MySDKDemo路径下, 执行pod install
    在这里插入图片描述

在这里插入图片描述

  • 当前选中demo工程进行调试
    在这里插入图片描述
  • 选中SDK, 进行编译
    在这里插入图片描述

Step5: 联调

  • 在demo中需要使用的时候,先在MySDK工程中command + B(确保demo中有效使用)
  • demo中引入头文件#import <MySDK/MySDK.h>

以上工程架构搞定, 接下来开始改动MySDK工程, 进行测试

MySDK工程中编写需求代码

  • 在MySDK目录下创建一个Hud类进行测试
#import "Hud.h"
#import <SVProgressHUD.h>
@implementation Hud
- (void)showToast:(NSString *)msg {
    [SVProgressHUD showInfoWithStatus:msg];
}
@end
  • 拖进需要暴露的头文件
    在这里插入图片描述
  • 在MySDK.h中引入你的Hud#import <MySDK/Hud.h>
    在这里插入图片描述
  • 在demo中使用
#import <MySDK/MySDK.h>

[Hud showToast:@"Hello"];

导出framework

在这里插入图片描述
在这里插入图片描述

发布到Cocoapods

  • 创建MySDK.podspec文件, 并把导出的MySDK.framework一同放入同一个文件
    在这里插入图片描述
Pod::Spec.new do |s|
    s.name         = "MySDK"
    s.version      = "1.0.0"
    s.summary      = "测试用SDK"
    s.description  = <<-DESC
测试用SDK, 使用OC实现
    DESC
    s.homepage     = "https://github.com/nieyinlong/MySDK_iOS"
    s.author           = { 'nieyinlong' => 'nyl0819@126.com' }
    s.platform     = :ios, "9.0"
    s.source       = { :git => "https://github.com/nieyinlong/MySDK_iOS.git", :tag => s.version }
  # 过不支持真机调试则加上下面的
    s.pod_target_xcconfig = {
        'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
    }
    s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
  # 不支持真机结束
  
    s.vendored_frameworks = 'MySDK.framework'
    s.dependency 'AFNetworking', '~> 4.0'
    s.dependency 'SVProgressHUD'
end
  • 执行发布命令
  • cd 到MySDK_iOS
pod lin lint --allow-warnings
pod tunk push

发布成功即可在其他项目中使用

pod 'MySDK'

报错解决’MySDK/MySDK.h’ file not found

在这里插入图片描述

demo github地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教你一步一步开发iOS私有SDK 到并上传到cocoapods 的相关文章

随机推荐

  • 【面经】2023年软件测试面试题大全(持续更新)附答案

    面试的准备跟笔试的准备是不一样的 xff0c 笔试的准备的话 xff0c 可以去刷题 xff0c 面试的话 xff0c 专业的面试官一般首先都会根据你简历上写的内容去提问 xff0c 都问完之后 xff0c 最后可能再会问一下简历之外的 x
  • 今天面了一个来阿里要求月薪23K,明显感觉他背了很多面试题...

    最近有朋友去阿里面试 xff0c 面试前后进行了20天左右 xff0c 包含4轮电话面试 1轮笔试 1轮主管视频面试 1轮hr视频面试 据他所说 xff0c 80 的人都会栽在第一轮面试 xff0c 要不是他面试前做足准备 xff0c 估计
  • svn: E230001: Server SSL certificate verification failed:certificate issued for a different hostname

    svn E230001 Server SSL certificate verification failed certificate issued for a different hostname issuer is nottrusted
  • linux系统中的用户管理

    linux系统中的用户管理 1 用户及用户组存在的意义1 1用户存在的意义1 2用户组存在意义2 用户及用户组在系统中的存在方式3 用户切换3 1用户查看3 2用户切换4 用户涉及到的系统配置文件5 用户和用户组建立及删除6 用户和用户组的
  • ddns的搭建(动态域名解析DDNS)

    ddns的搭建 服务主机客户端dhcp分配ip失败 动态域名解析 xff08 Dynamic DNS xff0c 简称DDNS xff09 是把互联网域 服务原理 服务原理 名指向可变IP地址的系统 DNS只是提供了域名和IP地址之间的静态
  • 谷歌浏览器去除广告--广告终结者

    每次使用谷歌浏览器查阅一些资料的时候 xff0c 总是会弹出一大堆广告窗口 xff0c 影响阅读体验 现在找到一种方法可以屏蔽网页上浮动的 xff0c 弹框的 xff0c 渐变的广告 1 下载离线插件安装包 Advertising Term
  • DM数据库Linux服务器启动图形化工具

    背景 DM数据库客户端工具位于 DM 安装目录的 tool 目录下 在Linux系统中使用这些客户端工具需要开启图形化功能 xff0c 本文介绍开启Linux图形化的操作步骤 开启图形化 root用户允许其他用户连接 xff0c 执行 sp
  • MySQL基础概述

    1 MySQL列类型 xff1a 带符号 无符号整数 xff0c 1 2 3 4 8字节长 xff0c FLOAT xff0c DOUBLE xff0c CHAR xff0c VARCHAR xff0c TEXT xff0c BLOB xf
  • Ubuntu11.04无线网络已禁用或设备未就绪

    以前在Win7下安装Ubuntu的时候 xff0c Ubuntu能够正常的连接到无线网 xff0c 但是在新买的笔记本上安装完Ubuntu11 04后 xff0c 出现了无线网络已经禁用的情况 xff0c 起初我以为是无线网络开关未开启 x
  • 第11章 远程联机服务器SSH/XDMCP/VNC/RDP

    1 用例 远程联机服务器 xff0c 提供用户远程透过文字或图形接口登入系统 2 静态 2 1 sshd 该服务提供远程联机 xff0c 并且数据加密 查看是否启动命令 service sshd start 设置系统启动是开启sshd服务命
  • ubuntu下找不到openssl/ssl.h

    编译代码 xff0c 总提示找不到openssl ssl h文件 xff0c 怀疑没有安装ssl 于是 sudo apt get install openssl 之后再编译 xff0c 还是提示同样的问题 于是查找 usr local in
  • 基于Docker的RStudio-server构建

    docker rstudio server Dockerfile for RStudio Server Docker image Pull the image from Docker Hub span class token functio
  • 回收站的路径 (CentOS6、Fedora10)

    刚开始装Linux系统的时候在root用户下向其他用户拷贝过一些文件 xff0c 后面就删除了 但在普通用户下 xff0c 没有删除的权限 xff0c 想修改权限后删除又找不到回收站的路径 xff08 刚开始还不知道搜索回收站的路径 xff
  • dmPython

    dmPython 达梦为适配 python 开发出 dmPython 接口 xff0c 在使用时还需要需要配置 DPI 运行环境 1 连接方式 dmPython提供两种连接方式 xff0c 不仅支持 key 61 value 形式传参连接
  • iOS 手动实现KVO / iOS KVO底层原理

    手动实现KVO KVO底层原理 git demo地址 看图 首先说一下Apple KVO的底层实现吧 内部实现原理 KVO是基于runtime机制实现的 xff0c 运用了一个isa swizzling技术 isa swizzling就是类
  • Flutter系列 - 引入本地图片

    Flutter系列 引入本地图片 1 大致文件结构 images myIcon png myIcon2 png lib pubspec yaml 2 步骤 在flutter中引入本地图片 我们先在项目根目录建立一个images文件夹 把本地
  • 如何写出优美的 C 代码 面向对象的 C

    基础知识 结构体 除了提供基本数据类型外 xff0c C 语言还提供给用户自己定制数据类型的能力 xff0c 那就是结构体 xff0c 在 C 语言中 xff0c 你可以用结构体来表示任何实体 结构体正是面向对象语言中的类的概念的雏形 xf
  • Flutter系列 --- Flutter与原生进行通信交互

    Flutter系列 Flutter与原生进行通信 项目git地址 demo地址 flutter无法直接调用系统相机 麦克风 定位 手机版本信息等 xff0c 此时就需要与原生方法进行交互了 需求 目前我们已经有了一个flutter项目 工程
  • antd Tab切换后子组件重复渲染

    antd Tab切换后子组件重复渲染 当切换到历史订单的时候 MyComponent被渲染了两次 内部的componentDidMount被执行了两次 原因是TabPane下面的组件创建后被保留在dom树中 切换的时候会再次创建 span
  • 教你一步一步开发iOS私有SDK 到并上传到cocoapods

    1 需求 我们要提供一个iOS 私有 SDK 对方可以通过cocoapods安装 并且只能看到头文件 2 大致流程 使用Xcode创建一个framework工程 在里面编写你需要提供的功能创建podspec文件 依赖这个framework