内容概览
- 创建Pod模板项目;
- 定制podspec;
- 安装和配置fastlane;
- 配置travis.yml;
- 上传到公共库Cocoapods;
创建模板项目
使用Pod的模板,创建项目:
pod lib create LibraryName
例如,现在要创建DemoLibrary。用命令行执行以下命令:
pod lib create DemoLibrary
然后,你会看到以下提示,根据自己的需求选取即可:
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> Swift
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Quick / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
这些自定义选项选择完毕后,你会看到项目已经在Xcode中打开。
打开Finder,查看项目的文件目录结构:
DemoLibrary.podspec 和 .travis.yml 就是需要配置的内容。
如果要将DemoLibrary目录中编写的源码用于Example目录中的项目,你需要注意这些事项:
- 更新DemoLibrary中的源码,你就需要在Example目录中执行
pod install
,然后才可以在Example中使用DemoLibrary中的内容。 - 在DemoLibrary中编写的代码,记得使用
public
甚至open
来提供相应的访问控制权限。否则,在DemoLibrary中定义的类,在Example项目中不可见。 - 在某些时候,你可能会在Example项目中遭遇编译错误等情况。这时候,你可以尝试对Example项目进行
Clean
操作。
定制podspec
podspec
文件用来描述某个版本的Pod Library。其中包含了很多细节,比如:源代码从哪里获取,需要使用哪些文件,用于编译过程的设置参数以及一些元数据(名称、版本、描述)等。
可供参考的podspec:
Kingfisher.podspec
RxCocoa.podspec
你可以使用命令行指令 pod lib lint
来检查你的.podspec是否存在错误,这个指令不需要联网。
也可以使用 pod spec lint
,它会检查外部仓库和tag。
如果运行 pod lib lint
报错,可以尝试通过更新 cocoapods 来解决: sudo gem install cocoapods
。
如果运行 pod spec lint
报错,可以尝试清理本地的 cocoapods 缓存来解决: pod cache clean YourLibraryName
。
另外,如果你的项目还依赖于其他项目,可以在.podspec文件中指定这些依赖:
Pod::Spec.new do |s|
s.name = 'MyLibrary'
...
s.dependency 'RxSwift', '~> 4.4.0'
s.dependency 'Alamofire', '~> 4.8.1'
s.dependency 'RxAlamofire', '~> 4.3.0'
end
然后在引用这个Library的演示项目(比如上文中DemoLibrary的Example目录)的目录执行 pod install
,就可以集成这些依赖库到你的演示项目中。
如果项目太大或者需要拆分出子模块,你可以参考这个示例:
Pod::Spec.new do |s|
s.name = 'BigLibrary'
s.version = '1.0.0'
s.summary = 'summary'
s.swift_version = '5.0'
s.description = <<-DESC
This is a description.
DESC
s.homepage = 'https://github.com/xxx/BigLibrary'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'xxx' => 'xxx@hotmail.com' }
s.source = { :git => 'https://github.com/xxx/BigLibrary.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.subspec 'Accessory' do |accessory|
accessory.source_files = 'Sources/Classes/Accessory/*.{h,m,swift}'
# 排除其他子模块的文件
accessory.exclude_files = 'Sources/Classes/Core/*.{h,m,swift}', 'Sources/Classes/CoreTools/*.{h,m,swift}'
accessory.dependency 'BigLibrary/Core'
accessory.dependency 'Alamofire', '~> 4.8.1'
accessory.dependency 'RxAlamofire', '~> 4.3.0'
end
s.subspec 'Core' do |core|
core.source_files = 'Sources/Classes/Core/*.{h,m,swift}', 'Sources/Classes/CoreTools/*.{h,m,swift}'
core.dependency 'RxSwift', '~> 4.4.0'
end
s.default_subspec = 'Accessory'
end
注意事项:
- 通过
pod 'BigLibrary'
会导入所有的模块(Core + Accessory) - 单独导入核心模块,可以使用
pod 'BigLibrary/Core'
- 单独导入附加模块,可以使用
pod 'BigLibrary/Accessory'
- 更改.podspec文件后,记得在项目中使用
pod install
来重新构建依赖库
安装和配置fastlane
fastlane
可以通过自动化流程来大幅度减轻测试分发和部署的工作量。
它可以帮你处理很多繁杂的工作,比如:生成屏幕截图、代码签名以及发布你的应用到指定的环境。
这里主要是用来运行单元测试,在travis中可以配置运行fastlane。
然后,通过fastlane来启动单元测试。fastlane中可以定义多个lane。
将不同的lane相互组合,甚至可以完成所有工作(测试、截图、签名、打包、发布等),强大无比!
可供参考的fastlane:
Kingfisher fastlane
可能遭遇的错误:
Bundler could not find compatible versions for gem "bundler"
可参考的解决方案:
https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
配置travis.yml
打开travis官网,用Github帐号即可登录。
登录后,找到设置页面,然后你就可以看到你自己的仓库。
搜索并找到你正在构建的开源库,然后把持续集成的开关打开。
可供参考的travis.yml:
Kingfisher travis.yml
可能遭遇的错误:
Could not find unf_ext-0.0.7.6 in any of the sources
可参考的解决方案:
# 在Gemfile中加入以下内容,然后执行 `bundle update`:
gem "cocoapods"
上传到公共库Cocoapods
# 填写账号信息,注册完要去邮箱点一个验证邮件(邮箱最好和git的邮箱保持一致)
pod trunk register 邮箱 '昵称' --verbose
# 验证完成后可以查看账号信息,比如:Name, Email 等
pod trunk me
# 提交
pod trunk push --allow-warnings
在这一步,可能遭遇的错误:
podspec file patterns: The `source_files` pattern did not match any file.
可参考的解决方案:
https://stackoverflow.com/a/43086482
也可以尝试清理Pod缓存:
pod cache clean --all
成功之后,你会看到以下内容:
🎉 Congrats
🚀 TaskCommander (1.0.1) successfully published
📅 May 14th, 03:47
🌎 https://cocoapods.org/pods/YourLibrary
👍 Tell your friends!
可以手动验证一下:
# 可能需要等一段时间,之后才能搜到
pod search LibraryName
# 也可以尝试以下指令
# 将https://github.com/CocoaPods/Specs的内容更新到~/.cocoapods/repos
pod setup
# 清除缓存
rm -rf ~/Library/Caches/Cocoapods
参考文章:
Making a CocoaPod
Using Pod Lib Create
如何制作自己的CocoaPod库
转载请注明出处,谢谢~
网友评论