iOS-发布代码到cocoapods上详细步骤

完整步骤:

  1. 把你需要发布到CocoaPods的代码写好。

  2. 用Xcode创建一个Framework项目,将你写好的代码拖入Framework,进行相关配置,根据需求打包Framework。

  3. 注册CocoaPods账号,检查库名是否已被占用,没有被占用就创建Podspec文件,拖入通用Framework。

  4. 创建git仓库,修改xxx.podspec配置,将代码推送到远程仓库并进行版本控制,验证Podspec文件。

  5. 验证通过,发布到 CocoaPods。

1. 创建Framework项目

1. 在Xcode中,选择File -> New -> Project

2. 选择iOS -> Framework & Library -> Framework,然后点击Next

创建Framework

3. 输入产品名称(例如:LanguageSet),选择语言(Objective-C或Swift),点击Next并保存。

创建cocoapodsDemo

2. 配置Framework

  • 添加代码文件:将你的源代码文件拖入项目,确保在Build Phases -> Headers中设置好公开头文件(Public Headers)。
添加代码文件
  • 将需要公开的头文件拖到public:
设置好公开头文件

添加第三方库

1.使用cocoapod是可以自动管理第三方库,在Link Binary With Libraries 中找到Pod_的framwork 选择Optional

2.手动添加第三方库和文件时,不要选择target

  • 设置Build Settings:

  • Mach-O Type: 默认为Dynamic Library,也可以选择Static Library(但Framework通常指动态库)。

    Mach-O Type

  • Build Active Architecture Only: 设置为NO,以支持所有架构。

    Build Active Architecture Only

  • iOS Deployment Target: 选择你希望支持的最低iOS版本。

    iOS Deployment Target

  • Swift版本:如果是Swift项目,确保设置正确的Swift版本。

  • Enable Bitcode: 如果需要,设置为YES。

3. 打包Framework(支持真机和模拟器)

我们需要同时支持真机和模拟器架构(arm64, x86_64),并最终合并为一个通用Framework。

1. 分别编译真机和模拟器版本

1. 真机Release

xcodebuild archive 

-scheme LanguageSet 

-configuration Release 

-destination "generic/platform=iOS" 

-archivePath "build/LanguageSet-iOS" 

SKIP_INSTALL=NO 

BUILD_LIBRARY_FOR_DISTRIBUTION=YES

2. 模拟器Release

xcodebuild archive 

-scheme LanguageSet 

-configuration Release 

-destination "generic/platform=iOS Simulator" 

-archivePath "build/LanguageSet-Simulator" 

SKIP_INSTALL=NO 

BUILD_LIBRARY_FOR_DISTRIBUTION=YES

2. 合并两个Framework-打包通用Framework(支持真机+模拟器)

使用lipo工具合并二进制文件,并复制模拟器的swiftmodule(如果有)到真机Framework中。


# 创建通用Framework目录

mkdir -p build/LanguageSet-Universal

# 复制真机Framework到通用目录

cp -R build/LanguageSet-iOS.xcarchive/Products/Library/Frameworks/LanguageSet build/LanguageSet-Universal/

# 合并二进制文件

lipo -create 

build/LanguageSet-iOS.xcarchive/Products/Library/Frameworks/LanguageSet.framework/LanguageSet 

build/LanguageSet-Simulator.xcarchive/Products/Library/Frameworks/LanguageSetframework/LanguageSet 

-output build/LanguageSet-Universal/LanguageSet.framework/LanguageSet

# 如果使用Swift,需要合并swiftmodule

if [ -d "build/LanguageSet-Simulator.xcarchive/Products/Library/Frameworks/LanguageSet.framework/Modules/LanguageSet.swiftmodule" ]; then

cp -R build/LanguageSet-Simulator.xcarchive/Products/Library/Frameworks/LanguageSet.framework/Modules/LanguageSet.swiftmodule/* \

build/LanguageSet-Universal/LanguageSet.framework/Modules/LanguageSet.swiftmodule/

fi

将上面的合并起来:

创建一个打包脚本 build_framework.sh

#!/bin/bash

# 1. 定义基础变量
SCHEME_NAME="LanguageSet"   # 替换为实际Scheme名
PROJECT_NAME="LanguageSet"    # 替换为实际工程名
CONFIGURATION="Release"           # 建议使用Release模式
OUTPUT_DIR="${PWD}/Output"        # 输出目录

# 2. 清理旧构建
rm -rf "${OUTPUT_DIR}"
mkdir -p "${OUTPUT_DIR}"

# 3. 编译真机版本 (arm64, armv7)
xcodebuild archive \
  -project "${PROJECT_NAME}.xcodeproj" \
  -scheme "${SCHEME_NAME}" \
  -configuration "${CONFIGURATION}" \
  -sdk iphoneos \
  -archivePath "${OUTPUT_DIR}/iphoneos.xcarchive" \
  SKIP_INSTALL=NO \
  BUILD_LIBRARIES_FOR_DISTRIBUTION=YES  # 支持多架构 [[6]]

# 4. 编译模拟器版本 (x86_64, arm64)
xcodebuild archive \
  -project "${PROJECT_NAME}.xcodeproj" \
  -scheme "${SCHEME_NAME}" \
  -configuration "${CONFIGURATION}" \
  -sdk iphonesimulator \
  -archivePath "${OUTPUT_DIR}/iphonesimulator.xcarchive" \
  SKIP_INSTALL=NO \
  BUILD_LIBRARIES_FOR_DISTRIBUTION=YES  # M1芯片需包含arm64 [[3, 6]]

# 5. 合并为XCFramework (官方推荐方式)
xcodebuild -create-xcframework \
  -framework "${OUTPUT_DIR}/iphoneos.xcarchive/Products/Library/Frameworks/${SCHEME_NAME}.framework" \
  -framework "${OUTPUT_DIR}/iphonesimulator.xcarchive/Products/Library/Frameworks/${SCHEME_NAME}.framework" \
  -output "${OUTPUT_DIR}/${SCHEME_NAME}.xcframework"  # 生成多平台兼容包 [[2, 6, 12, 16]]

# 6. 可选:生成Fat Framework (传统合并方式)
# lipo -create \
#   "${OUTPUT_DIR}/iphoneos.xcarchive/Products/Library/Frameworks/${SCHEME_NAME}.framework/${SCHEME_NAME}" \
#   "${OUTPUT_DIR}/iphonesimulator.xcarchive/Products/Library/Frameworks/${SCHEME_NAME}.framework/${SCHEME_NAME}" \
#   -output "${OUTPUT_DIR}/${SCHEME_NAME}.framework/${SCHEME_NAME}"  # 需手动处理头文件 [[11, 15, 20]]

# 7. 打开输出目录
open "${OUTPUT_DIR}"
build_framework.sh 存放

运行脚本

chmod +x build_framework.sh
./build_framework.sh

生成文件夹:

XCFramework

注册CocoaPods的Trunk

# 注册CocoaPods账号(仅首次)
pod trunk register your-email@example.com "Your Name" --description='MacBook Pro'

CocoaPods会向你提供的邮箱发送一个验证链接,点击链接完成验证。

验证CocoaPods的Trunk注册结果

pod trunk me
Trunk创建验证.jpg

创建Podspec文件

pod lib create LanguageSet

创建Podspec文件

生成Podspec文件夹

生成Podspec文件夹

Example: 放demo应用

LanguageSet: /Classes主代码 /Assets图片资源文件

将之前生成的XCFramework拖入新建Podspec文件夹中的LanguageSet中

XCFramework拖入后

创建Git仓库

创建Git仓库

修改LanguageSet.podspec配置

Pod::Spec.new do |s|
  s.name             = 'LanguageSet'
  s.version          = '0.0.1'
  s.summary          = 'multilingual processing.'

  s.description      = <<-DESC
  A few simple lines of code can handle multiple languages
  DESC

  s.homepage         = 'https://github.com/GavinCarter1991/LanguageSet'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'gavin' => 'kindyourself@163.com' }
  s.source           = { :git => 'https://github.com/GavinCarter1991/LanguageSet.git', :tag => s.version.to_s }

  s.ios.deployment_target = '12.0'
  s.vendored_frameworks = 'LanguageSet/Classes/LanguageSet.xcframework'
  # 添加模块映射
  s.preserve_paths = 'LanguageSet/Classes/LanguageSet.xcframework'
  
  # 添加资源处理排除规则
  s.pod_target_xcconfig = {
    'EXCLUDED_FILE_GROUP_PATTERNS' => [
      '**/LanguageSet.xcframework/**/_CodeSignature/**',
      '**/LanguageSet.xcframework/**/Modules/**'
    ]
  }
  
  # 禁用模块验证(针对 xcframework)
  s.user_target_xcconfig = { 'VALIDATE_WORKSPACE' => 'NO' }

end

设置Git仓库

# 创建本地仓库
cd LanguageSet 进入文件夹
git add .
git commit -m "first commit"

# 创建远程仓库(在Gitee/GitHub上创建)
git remote add origin https://github.com/GavinCarter1991/LanguageSet.git // 关联仓库
git push -u origin main

# 添加版本标签
git tag 0.0.1
git push --tags
tags

发布到CocoaPods

1. 首次发布

# 验证podspec
pod lib lint --allow-warnings

# 发布到CocoaPods
pod trunk push CocoaPodsDemo.podspec --allow-warnings
发布到CocoaPods

2. 更新版本

更新podspec中的版本号

推送新代码到你的库的 Git 仓库,创建新的Git标签(tag)

重复推送和发布的步骤

Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容