CocoaPods 私有库

名词
私有库名字
私有库地址
私有repo 名字
私有repo 地址

1、创建pod模板

pod lib create 私有库名字

What platform do you want to use?? [ iOS / macOS ]
 > iOS

What language do you want to use?? [ Swift / ObjC ]
 > ObjC

Would you like to include a demo application with your library? [ Yes / No ]
 > Yes

Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > None

Would you like to do view based testing? [ Yes / No ]
 > No

What is your class prefix?
 > CC

随后会开始创建项目,项目路径如下

.
├── Example --demo位置
│   ├── Podfile
│   ├── Podfile.lock
│   ├── Pods
│   ├── Tests
│   ├── podDemo
│   ├── podDemo.xcodeproj
│   └── podDemo.xcworkspace
├── LICENSE
├── README.md
├── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
├── podDemo
│   ├── Assets --资源位置(xib、mp3)
│   └── Classes --源代码位置
└── podDemo.podspec

10 directories, 5 files

2、将此仓库关联远端仓库 我们这面关联的是gitlab

git remote add origin 私有库地址

3、修改podSpec文件

Pod::Spec.new do |s|
  s.name             = 'CCWechat'
  s.version          = '0.1.0'
  s.summary          = 'A short description of CCWechat.' - 初始化后必须修改
  s.description      = <<-DESC - 初始化后必须修改
TODO: Add long description of the pod here.
                       DESC
  s.homepage         = '私有库地址'- 初始化后必须修改
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { '彭盛凇' => '个人邮箱' }- 初始化后必须修改
  s.source           = { :git => '私有库地址', :tag => s.version.to_s }- 初始化后必须修改
  s.ios.deployment_target = '9.3'- 初始化后必须修改
  s.source_files = 'CCWechat/Classes/**/*'
  #s.xcconfig = {
  #'VALID_ARCHS' =>  'arm64 x86_64',
  #} 不支持i386时开启
  #s.resources = 'CCActiveNotification/Assets/**/*' 资源
  s.dependency 'JPush', '3.1.2'
  s.dependency 'QQ_XGPush', '3.3.3-beta'
  s.dependency 'CCActiveNotification', '0.1.1'
end

4、本地验证

基础命令

pod lib lint 私有库名字.podspec 

如果创建的私有库中的依赖库包含.a静态库时,在基础命令后拼接

--use-libraries --allow-warnings

如果要打印详细信息,在基础命令后拼接

--verbose

如果创建的私有库中引用到其他私有库时,在基础命令后拼接

--sources=私有repo地址,https://github.com/CocoaPods/Specs.git

eg:

pod lib lint 私有库名字.podspec  --sources=私有repo地址,https://github.com/CocoaPods/Specs.git --use-libraries --allow-warnings --verbose

可选

pengchengsongdeMacBook-Pro:~ pengchengsong$ pod lib lint --help
Usage:

    $ pod lib lint

      Validates the Pod using the files in the working directory.

Options:

    --quick                                           Lint skips checks that would
                                                      require to download and build
                                                      the spec
    --allow-warnings                                  Lint validates even if warnings
                                                      are present
    --subspec=NAME                                    Lint validates only the given
                                                      subspec
    --no-subspecs                                     Lint skips validation of
                                                      subspecs
    --no-clean                                        Lint leaves the build directory
                                                      intact for inspection
    --fail-fast                                       Lint stops on the first failing
                                                      platform or subspec
    --use-libraries                                   Lint uses static libraries to
                                                      install the spec
    --sources=https://github.com/artsy/Specs,master   The sources from which to pull
                                                      dependent pods (defaults to
                                                      https://github.com/CocoaPods/Specs.git).
                                                      Multiple sources must be
                                                      comma-delimited.
    --private                                         Lint skips checks that apply
                                                      only to public specs
    --swift-version=VERSION                           The SWIFT_VERSION that should be
                                                      used to lint the spec. This
                                                      takes precedence over a
                                                      .swift-version file.
    --skip-import-validation                          Lint skips validating that the
                                                      pod can be imported
    --skip-tests                                      Lint skips building and running
                                                      tests during validation
    --silent                                          Show nothing
    --verbose                                         Show more debugging information
    --no-ansi                                         Show output without ANSI codes
    --help                                            Show help banner of specified
                                                      command

5、将本地pod相关所有文件推送到远端,并打上对应的tag

6、推送至指定私有repo

基础命令

 pod repo push 私有repo名字 私有库名字.podspec

如果创建的私有库中的依赖库包含.a静态库时,在基础命令后拼接

--use-libraries --allow-warnings

如果要打印详细信息,在基础命令后拼接

--verbose

eg:

 pod repo push 私有repo名字 私有库名字.podspec --sources=私有repo地址,https://github.com/CocoaPods/Specs.git --use-libraries --allow-warnings

可选

pengchengsongdeMacBook-Pro:~ pengshengsong$ pod repo push --help
Usage:

    $ pod repo push REPO [NAME.podspec]

      Validates `NAME.podspec` or `*.podspec` in the current working dir, creates a
      directory and version folder for the pod in the local copy of `REPO`
      (~/.cocoapods/repos/[REPO]), copies the podspec file into the version directory,
      and finally it pushes `REPO` to its remote.

Options:

    --allow-warnings                                  Allows pushing even if there are
                                                      warnings
    --use-libraries                                   Linter uses static libraries to
                                                      install the spec
    --sources=https://github.com/artsy/Specs,master   The sources from which to pull
                                                      dependent pods (defaults to all
                                                      available repos). Multiple
                                                      sources must be comma-delimited.
    --local-only                                      Does not perform the step of
                                                      pushing REPO to its remote
    --no-private                                      Lint includes checks that apply
                                                      only to public repos
    --skip-import-validation                          Lint skips validating that the
                                                      pod can be imported
    --skip-tests                                      Lint skips building and running
                                                      tests during validation
    --commit-message="Fix bug in pod"                 Add custom commit message. Opens
                                                      default editor if no commit
                                                      message is specified.
    --use-json                                        Push JSON spec to repo
    --swift-version=VERSION                           The SWIFT_VERSION that should be
                                                      used when linting the spec. This
                                                      takes precedence over a
                                                      .swift-version file.
    --no-overwrite                                    Disallow pushing that would
                                                      overwrite an existing spec.
    --silent                                          Show nothing
    --verbose                                         Show more debugging information
    --no-ansi                                         Show output without ANSI codes
    --help                                            Show help banner of specified
                                                      command

7、更新repo

pod repo update 私有repo名字

8、search SDK

pod search 私有库名字

更新私有库

1、执行上述第4、5、6、7、8步即可

其他相关命令

1、移除私有repo(当私有库需要clean的时候)

pod repo remove 私有repo名字

2、添加私有repo(当私有库需要clean的时候)

pod repo add repoName 私有repo地址

3、删除searchIndex(当search 不到的时候使用)

rm -rf ~/Library/Caches/CocoaPods/search_index.json

4、子库概念

  s.subspec 'Component_sub' do |aa|
      aa.source_files = 'Component/Classes/Component_sub/**/*'
      #aa.dependency 'AFNetworking', '~> 3.2.0'
  end

遇到的问题

1、依赖库中架构不支持i386

相关错误

    ld: warning: ignoring file /var/folders/r2/qz19lm3s15lf5x9ltjgjq1x80000gn/T/CocoaPods-Lint-20190417-8094-1gelzu0-CCPush/Pods/JPush/libjpush-ios-3.1.2.a, missing required architecture i386 in file /var/folders/r2/qz19lm3s15lf5x9ltjgjq1x80000gn/T/CocoaPods-Lint-20190417-8094-1gelzu0-CCPush/Pods/JPush/libjpush-ios-3.1.2.a (4 slices)
    ld: warning: ignoring file /var/folders/r2/qz19lm3s15lf5x9ltjgjq1x80000gn/T/CocoaPods-Lint-20190417-8094-1gelzu0-CCPush/Pods/JCore/libjcore-ios-1.2.6.a, missing required architecture i386 in file /var/folders/r2/qz19lm3s15lf5x9ltjgjq1x80000gn/T/CocoaPods-Lint-20190417-8094-1gelzu0-CCPush/Pods/JCore/libjcore-ios-1.2.6.a (4 slices)
    Undefined symbols for architecture i386:
      "_kJPFServiceErrorNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
      "_kJPFNetworkIsConnectingNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
      "_kJPFNetworkFailedRegisterNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
      "_kJPFNetworkDidSetupNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
      "_kJPFNetworkDidRegisterNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
      "_kJPFNetworkDidLoginNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
          -[CCPush cc_jPushNetworkDidLogin:] in libCCPush.a(CCPush.o)
      "_kJPFNetworkDidCloseNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
      "_OBJC_CLASS_$_JPUSHRegisterEntity", referenced from:
          objc-class-ref in libCCPush.a(CCPush.o)
      "_kJPFNetworkDidReceiveMessageNotification", referenced from:
          -[CCPush initJPProviderWith:] in libCCPush.a(CCPush.o)
      "_OBJC_CLASS_$_JPUSHService", referenced from:
          objc-class-ref in libCCPush.a(CCPush.o)
    ld: symbol(s) not found for architecture i386
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

在podspec文件中加上下方配置即可

  s.xcconfig = {
  'VALID_ARCHS' =>  'arm64 x86_64',
  }

参考链接:
https://www.jianshu.com/p/2bba5e7bc7fe
https://stackoverflow.com/questions/41594895/pod-trunk-push-fail-when-build-xcodebuild-in-i386/41614762#41614762

end

你可能感兴趣的:(CocoaPods 私有库)