iOS 构建Cocoapods开源库

2019-05-14  本文已影响0人  FicowShen

内容概览

  1. 创建Pod模板项目;
  2. 定制podspec;
  3. 安装和配置fastlane;
  4. 配置travis.yml;
  5. 上传到公共库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目录中的项目,你需要注意这些事项:

  1. 更新DemoLibrary中的源码,你就需要在Example目录中执行 pod install,然后才可以在Example中使用DemoLibrary中的内容。
  2. 在DemoLibrary中编写的代码,记得使用 public 甚至 open 来提供相应的访问控制权限。否则,在DemoLibrary中定义的类,在Example项目中不可见。
  3. 在某些时候,你可能会在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

注意事项:


安装和配置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是有名的持续集成平台。

打开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库



转载请注明出处,谢谢~

上一篇下一篇

猜你喜欢

热点阅读