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

1
2
3
4
5
6
7
8
9
10
11
12
13
xcodebuild archive 

-scheme LanguageSet

-configuration Release

-destination "generic/platform=iOS"

-archivePath "build/LanguageSet-iOS"

SKIP_INSTALL=NO

BUILD_LIBRARY_FOR_DISTRIBUTION=YES

2. 模拟器Release

1
2
3
4
5
6
7
8
9
10
11
12
13
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中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 创建通用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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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 存放

运行脚本

1
2
chmod +x build_framework.sh
./build_framework.sh

生成文件夹:

XCFramework

注册CocoaPods的Trunk

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

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

验证CocoaPods的Trunk注册结果

1
pod trunk me

Trunk创建验证

创建Podspec文件

pod lib create LanguageSet

创建Podspec文件

生成Podspec文件夹

生成Podspec文件夹

Example: 放demo应用

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

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

XCFramework拖入后

创建Git仓库

创建Git仓库

修改LanguageSet.podspec配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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仓库

1
2
3
4
5
6
7
8
9
10
11
12
# 创建本地仓库
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. 首次发布

1
2
3
4
5
# 验证podspec
pod lib lint --allow-warnings

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

发布到CocoaPods

2. 更新版本

更新podspec中的版本号

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

重复推送和发布的步骤

Demo

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2025 kindyourself@163.com
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信