iOS pod sdk开发到发布,记录

本文章记录从开发sdk到发布cocopod的问题和流程,省的每次都忘还得重新查

1:pod lib create (sdk名称) 命令创建 工程结构,然后根据命令行提示进行选择.

What platform do you want to use?? [ iOS / macOS ]。~》 iOS

What language do you want to use?? [ Swift / ObjC ]。~》Objc

Would you like to include a demo application with your library? [ Yes / No ]  ~>Yes

Which testing frameworks will you use? [ Specta / Kiwi / None ] ~>None

Would you like to do view based testing? [ Yes / No ]. ~>no

What is your class prefix? ~> 个人需求随便

创建到此结束.

2:目录结构等说明

Classes为sdk代码文件夹.

Assets为图片文件夹

对应工程

sdk的说明和引用三方等配置在podspec中

主要如下:

Pod::Spec.new do |s|s.name             = 'thridsdk's.version          = '0.0.1's.summary          = ' thridsdk.'s.description      = <<-DESCthridsdkDESCs.homepage         = 'sdk说明主页's.license          = { :type => 'MIT', :file => 'LICENSE' }s.author           = { '作者' => '作者邮箱' }s.source           = { :git => 'git地址', :tag => s.version.to_s }s.ios.deployment_target = '11.0's.requires_arc = trues.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64','GCC_PREPROCESSOR_DEFINITIONS' => 'xxxxxxxx='+s.version.to_s}s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }s.dependency 'Masonry's.dependency 'Reachability's.dependency "FLAnimatedImage", "~> 1.0"s.dependency 'MJExtension's.dependency 'AFNetworking', '~> 3.2.1's.dependency 'FMDB's.dependency 'ReactiveCocoa', '~> 2.5's.resource = ['thridsdk/Assets/Images/**/*.{aac,wav,mp3,png,gif}']s.static_framework = true
#  s.source_files = 'thridsdk/Classes/**/*'s.ios.vendored_frameworks = 'thridsdk.framework'
end

问题:

building for iOS Simulator-arm64 but attempting to link with file built for iOS Simulator-x86_64

或此类架构问题进行如下设置:

podspec文件中添加

 s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'}

  s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

还需要在pod的安装目录下设置:

我的目录:/Library/Ruby/Gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager

builder.rb

274行:

def ios_build_options

      "ARCHS=\'$(ARCHS_STANDARD)\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'"

    end

和pod_utils下

其中thridsdk为最终上传时的静态库,在pods~》Products目录下,目录下为单一架构framework,提供出去时需要将release-iphoneos (arm64架构),release-iphonesimulator(x86架构)中的对应thridsdk.framework中的二进制文件合并.使用如下命令 在Products文件夹下使用:

lipo -create -output output/thridsdk  Release-iphoneos/thridsdk/thridsdk.framework/thridsdk Release-iphonesimulator/thridsdk/thridsdk.framework/thridsdk

可以使用命令 lipo -info thridsdk 输出架构信息,确认架构

然后替换其中一个framework中的同名文件,framework双架构包就完成了.

s.source_files = 'thridsdk/Classes/**/* 为开发时设置,可以看到源文件

s.ios.vendored_frameworks = 'thridsdk.framework' 上传时设置,只暴露头文件,删除thridsdk/classes文件夹.

使用下面命令验证sdk是否可以上传pod

pod lib lint thridsdk.podspec  --use-libraries  --allow-warnings

如果通过

在上传的的仓库中打个和版本号相同的tag

然后就可以上传pod了,用如下命令

pod trunk push thridsdk.podspec --allow-warnings

其中有个在sdk内部获取sdk版本号的需求,实现如下:

在podspec文件中设置 宏定义,将版本号设置到宏里

 s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64',

    'GCC_PREPROCESSOR_DEFINITIONS' => 'thridsdk_version='+s.version.to_s}

注意,多个设置需要在一个s.pod_target_xcconfig =中设置,不然会被覆盖

然后执行pod install,pod会在sdk的targets下 build settings ~》Preprocessor Macros 中设置thridsdk_version宏

宏值取用的时候不是字符串类型需要转化,转化如下:

    NSString *sdk_version = [NSString stringWithFormat:@"%@",@OS_STRINGIFY(thridsdk_version)];

直接使用会出现错误:

Invalid suffix ‘.x’ on floating constant 或者 Use of undeclared Identifier 'xxxxxx' 或其他@符号什么乱七八糟的错误.

到此结束

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发有必要学吗?看完这篇再决定吧

在科技的潮流中&#xff0c;每一次新操作系统的诞生都是对旧秩序的挑战与新机遇的孕育。鸿蒙操作系统的出现&#xff0c;无疑是近年来科技界最引人注目的事件之一。自华为于2019年正式推出鸿蒙系统以来&#xff0c;这一我们自主研发的操作系统不仅在国内引起巨大反响&#xff0…

解决ModuleNotFoundError: No module named ‘pysqlite2‘

目录 一、问题描述 二、问题分析 三、解决方法 四、参考文章 一、问题描述&#xff1a; 新建conda编译环境。安装Jupyter后打不开&#xff0c;报错&#xff1a; 二、问题分析&#xff1a; 缺少sqlite3动态链接库 三、解决方法&#xff1a; SQLite Download Page 下载…

力扣461. 汉明距离(位运算)

Problem: 461. 汉明距离 文章目录 题目描述思路复杂度Code 题目描述 思路 Problem: 力扣191. 位1的个数&#xff08;位运算&#xff09; 该题只需要在上题的基础上先对两个数进行一次异或操作即可 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( 1 ) O(1) O(1) Code …

【LeetCode】每日一题 2024_2_2 石子游戏 VI(排序、贪心)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;石子游戏 VI题目描述代码与解题思路 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;石子游戏 VI 题目链接&#xff1a;1686. 石子游戏 VI 题目描述…

Linux - iptables 防火墙

一. 安全技术和防火墙 1.安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

linux 下mongodb7版本怎么连?

概述&#xff1a;linux下的mongodb7版本默认是没有安装客户端的&#xff0c;需要下载shell客户端才能连&#xff0c;下载之后解压&#xff0c;不需要编译&#xff0c;进入bin目录就能自己运行&#xff0c;。 安装&#xff1a; linux 下mongodb7版本没有安装客户端需要当地下载…

【GitHub项目推荐--一个由OpenAI提供支持的聊天机器人和虚拟助手的构建平台】【转载】

Botpress Botpress是一个开源项目&#xff0c;它提供了一个平台&#xff0c;用于构建、部署和管理基于人工智能的聊天机器人和虚拟助手 github地址&#xff1a; https://github.com/botpress/botpress Botpress的介绍 Botpress是一个开源项目&#xff0c;它提供了一个平台&…

YOLOv8改进 | 细节涨点篇 | DySample一种超级轻量的动态上采样算子(效果完爆CARAFE)

一、 本文介绍 本文给大家带来的改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外…

vue2 组件注册

简单分享怎么将组件注册为全局组件&#xff0c;主要分为三部分&#xff1a; 一、使用 Vue.install 方法将自义定的组件挂载到 Vue 实例上&#xff0c;如下&#xff1a; 二、注册为全局组件&#xff0c;如下&#xff1a; 三、页面使用&#xff0c;如下&#xff1a;

Oracle闪回日志管理(flashbackup log)

Oracle闪回日志管理&#xff08;flashbackup log&#xff09; 1.开启闪回日志 shutdown immediate startup mount; alter database archivelog; alter database flashback on; alter database open; 2、查看闪回日志保留期限 show parameter flash 默认是1440分钟&#xff0c…

亚马逊新手选品的基本思路?亚马逊新手选品的注意事项?站斧浏览器

亚马逊新手选品的基本思路 寻找蓝海市场&#xff1a;避开竞争激烈的红海市场&#xff0c;如蓝牙耳机、数据线等&#xff0c;转而关注那些大卖家尚未涉足的领域&#xff0c;这样你才有机会分得一杯羹。 利润优先&#xff1a;对于资金实力有限的新手卖家&#xff0c;选择客单价…

如何用wps压缩pdf?教你3种方法~

当PDF文件过大时&#xff0c;很容易遇到无法上传等现象&#xff0c;这时候我们可以借助WPS&#xff0c;将PDF文件压缩变小&#xff0c;如果你还不知道怎么做&#xff0c;下面就来看下具体的压缩方法吧。 方法一&#xff1a;WPS Office 1、在WPS Office中打开需要压缩的PDF文件…