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      = <<-DESC
                            thridsdk
                       DESC
  s.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 = true
  s.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' 或其他@符号什么乱七八糟的错误.

到此结束

相关推荐
若水无华1 天前
fiddler 配置ios手机代理调试
ios·智能手机·fiddler
Aress"1 天前
【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件
ios·uni-app·ipa安装
Jouzzy2 天前
【iOS安全】Dopamine越狱 iPhone X iOS 16.6 (20G75) | 解决Jailbreak failed with error
安全·ios·iphone
瓜子三百克2 天前
采用sherpa-onnx 实现 ios语音唤起的调研
macos·ios·cocoa
左钦杨2 天前
IOS CSS3 right transformX 动画卡顿 回弹
前端·ios·css3
努力成为包租婆2 天前
SDK does not contain ‘libarclite‘ at the path
ios
安和昂2 天前
【iOS】Tagged Pointer
macos·ios·cocoa
I烟雨云渊T3 天前
iOS 阅后即焚功能的实现
macos·ios·cocoa
struggle20253 天前
适用于 iOS 的 开源Ultralytics YOLO:应用程序和 Swift 软件包,用于在您自己的 iOS 应用程序中运行 YOLO
yolo·ios·开源·app·swift
Unlimitedz3 天前
iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)
ios·音视频