CocoaPods-私有库

199 阅读4分钟

名词 私有库名字 私有库地址 私有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',
  }

参考链接: www.jianshu.com/p/2bba5e7bc… stackoverflow.com/questions/4…

#end