创建GIT仓库
Repository name 仓库名称
Description 描述
Public / Private 公开仓库或者私人仓库
Initialize this repository with a README 创建一个README文件
Add .gitignore 需要忽略的文件类型
Add a license 添加一个许可证,如果项目需要上传到cocoapods,最好选择一个。
将仓库克隆到本地指定目录,该目录下将自动创建HCKit-Swift文件夹,并且包含LICENSE和README.md文件。
cd /Users/chenhc/Documents/Swift
git clone https://github.com/chyo/HCKit-Swift.git
创建一个项目,并将项目根目录中的文件移动到HCKit-Swift目录中
创建Pods依赖文件
cd HCKit-Swift
pod spec create HCKit-Swift
HCKit-Swift根目录中将出现HCKit-Swift.podspec文件,将文件的内容修改为自己所需的
Pod::Spec.new do |s|
# 项目名
s.name = "HCKit-Swift"
# 版本号
s.version = "0.0.1"
# 摘要
s.summary = "一个简单的Swift库"
# 描述
s.description = <<-DESC
一个森罗万象的Swift库
DESC
# 主页
s.homepage = "https://github.com/chyo/HCKit-Swift"
# 证书
s.license = "MIT"
# 作者
s.author = { "ChenHongchao" => "[email protected]" }
# 平台
s.platform = :ios, "8.0"
# Swift版本
s.swift_version = "4.0"
# 来源
s.source = { :git => "https://github.com/chyo/HCKit-Swift.git", :tag => "#{s.version}" }
# 源代码
s.source_files = "Classes/*.swift"
# 资源文件
# s.resources = "Resources/*.png"
# 依赖系统库
# s.framework = "SomeFramework"
# s.frameworks = "SomeFramework", "AnotherFramework"
# s.library = "iconv"
# s.libraries = "iconv", "xml2"
# ARC
s.requires_arc = true
# XC配置
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
# 依赖库
# s.dependency "JSONKit", "~> 1.4"
end
创建项目
创建一个项目,在项目中创建一个实体文件夹Classes(非group),并在其中新建一个Swift类。
关闭项目,将项目根目录中的文件全部移动到HCKit-Swift中。
项目中的实体文件夹名称Classes和刚才所创建的HCKit-Swift.podspec文件中的s.source_files需保持一致,并且如果此文件夹包含多级目录,层级关系也要保持一致。假设Classes文件夹中有二级目录,那么s.source_files就应该改为:
s.source_files = "Classes/**/*.swift"
同步GIT仓库
// 版本标签,要与HCKit-Swift.podspec文件保持一致
git tag 0.0.1
// 上传标签
git push --tags
// 添加文件
git add .
// 提交
git commit -m '初次提交'
// 上传,默认合并到master主干
git push
// 校验pod文件
pod spec lint HCKit-Swift.podspec
根据校验的结果修改产生的错误,WARN类型的警告可以选择性处理,其他常见的一些错误:
Could not find remote branch 0.0.1 to clone.
// 无法找到版本号为0.0.1的分支/主干,执行 git push --tags 即可
The `source_files` pattern did not match any file.
The `resources` pattern did not match any file.
The `preserve_paths` pattern did not match any file.
module_map: Unable to find the specified module map file.
// 这几种错误的处理方式都是一样的,主要是podspec中配置的路径与实际路径不一致所导致的,
// 如果确认路径无误,那么需要重新设定.podspec文件中的s.version,
// 重新执行上述“同步GIT仓库”的操作,tag需要与s.version保持一致。
The validator used Swift 3.2 by default because no Swift version was specified. To specify a Swift version during validation, add the `swift_version` attribute in your podspec. Note that usage of the `--swift-version` parameter or a `.swift-version` file is now deprecated.
// 这个主要是因为Swift版本引起的,需指定代码运行的Swift版本
// 打开.podspec文件,添加 s.swift-version = '4.0.0'
如果通过校验,则会提示
-> HCKit-Swift (0.0.1)
Analyzed 1 podspec.
HCKit-Swift.podspec passed validation.
执行lint操作后根据cocoapods的安装目录,可以在本地文件夹中找到代码库
~/Library/Caches/CocoaPods/Pods/External
其他的一些操作(非必须)
// 删除版本标签
git tag -d 0.0.1
// 拉取代码
git pull
发布到Cocoapods
注册trunk,注册成功会在邮箱中收到一个验证地址,验证成功后就可以查看自己的个人信息。
pod trunk register 电子邮件 '用户名' --verbose
// 邮箱验证后,执行
pod trunk me
最后直行push操作将库上传到pods中,注意库的名称不能与其他人重复,否则会提示 xxx库的作者是xxxx。
pod trunk push
// 上传结果,这个过程需要一段时间
// [!] Found podspec `HCKit-Swift.podspec`
// Updating spec repo `master`
// Validating podspec
// -> HCKit-Swift (0.0.3)
// Updating spec repo `master`
// --------------------------------------------------------------------------------
// Congrats
//
// HCKit-Swift (0.0.3) successfully published
// May 21st, 20:53
// https://cocoapods.org/pods/HCKit-Swift
// Tell your friends!
// --------------------------------------------------------------------------------
此后每次版本变更需要执行以下几个步骤:
1. 变更.podspec文件的s.version
2. 同步GIT仓库,tag与s.version保持一致
3. trunk push
trunk成功后如果搜索不到自己的库,可以重新同步下pods代码
pod setup
如果setup之后依然搜索不到,那么需要重新建立检索文件
// 进入 /Users/用户名/Library/Caches/CocoaPods 文件夹删除search_index.json
// 执行
pod search HCKit-Swift
删除发布到cocoapods的框架
pod trunk delete 框架名称 版本号
CommonCrypto
在Swift中使用CommonCrypto库一般有两种方式,一种是建立桥接文件,一种是使用modulemap。我用的是modulemap的方式,模拟器和真机编译一切都正常,但是校验podsepc的时候提示了失败。
// 没配置相关信息的时候提示
no such module 'CommonCrypto'
// 配置了s.module_map、s.preserve_path、s.xcconfig的时候提示
HCKit-Swift/Classes/Extension/String+HCExtension.swift:10:8: error: could not build Objective-C module 'CCommonCrypto'
在stackflow上看了好多方法都不管用,最后终于找到了方案,记住,podspec中的 s.module_map = "xxxx" 这个是无效的,无效的!
在根目录创建文件夹Module,在文件夹中创建空文件(Other/empty),命名为module.modulemap,编辑文件:
module CommonCrypto [system] {
header "/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
在项目的Build Settings中找到Import Paths,设置其值为$(PROJECT_DIR)/Module,编译,这时候就可以正常引用了 import CommonCrypto。
打开.podspec文件,修改source_files、preserve_path、xcconfig:
// modulemap要配置在source_files中,配置在module_map中不起作用
s.source_files = "Classes/**/*.swift", "Module/*.modulemap"
s.preserve_path = "Module/module.modulemap"
s.xcconfig = { "SWIFT_INCLUDE_PATHS" => "$(PODS_ROOT)/HCKit-Swift/Module"}
接下来就是打版本标签,提交,校验即可。