【问题标题】:Cocoapods - Create pod for a private iOS repositoryCocoapods - 为私有 iOS 存储库创建 pod
【发布时间】:2021-05-30 16:53:47
【问题描述】:

我有一个不想与他人分享的代码仓库。但我想要一个 pod,其他人可以将其集成到他们的应用程序中。那可能吗 ?我遵循this 教程,但在尝试将其添加到不同的系统时出现错误: 找不到“pod_name”的规范。
这是 pod 文件:

# Uncomment the next line to define a global platform for your project
#platform :ios, '9.0'

source 'https://github.com/my_source_url'

target 'DemoPods' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!

 # Pods for DemoPods

pod 'MyPodName'

end  

我的用例:

  • 保持我的存储库私有,这样就无法访问源代码。
  • 为我的私人仓库创建 Pod。
  • 其他用户应该能够在他们的项目中添加 pod。

【问题讨论】:

    标签: ios github cocoapods


    【解决方案1】:

    要分发闭源 pod,您首先需要修改您的私有存储库,以便您可以生成 .xcframework 文件。

    通过 URL 分发

    您必须压缩 .xcframework 文件并通过 URL 将其提供给您的受众。 (无论是公开的还是私有的)

    然后你可以像这样创建一个.podspec 文件:

    Pod::Spec.new do |s|
        s.name = '<POD_NAME>'
        s.version = '<VERSION>'
        s.summary = '<SUMMARY>'
        s.description = <<-DESC
        <DESCRIPTION>
                             DESC
      
        s.homepage = '<A_URL_TO_A_WEBPAGE>'
        s.author = { '<AUTHOR_NAME>' => '<AUTHOR_EMAIL>' }
        s.source = { :http => '<URL_TO_YOUR_ZIP_FILE>' }
    
        ...
    
        s.vendored_frameworks = '<PATH_OF_XCFRAMEWORK_FILE_IN_THE_ZIP>.xcframework'
    end
    

    之后有两种分发方法:

    • Public:如果你想通过 cocoapods specs repo 分发你的 pod,你可以将你的 .podspec 文件推送到 cocoapods 主干关注this指南:

      pod trunk push <PATH_TO_YOUR_PODSPEC_FILE>.podspec
      

      用户的安装将与任何其他 pod 一样:

      use_frameworks!
      
      target 'TargetName' do
        pod '<POD_NAME>'
      end
      

      私人:对于私人分发,请关注thisquide,创建一个 私有规范 repo 并使用以下命令推送您的 podspec:

      pod repo push <REPO_NAME> <PATH_TO_YOUR_PODSPEC_FILE>.podspec
      

      用户的安装将是这样的:

      use_frameworks!
      
      target 'TargetName' do
        pod '<POD_NAME>', :source => '<PRIVATE_SPECS_REPO_URL>'
      end
      
    • 公开:如果您不介意 cocoapods 规格回购(或者如果您 想测试你的.podspec 文件)你可以制作你的.podspec 文件 通过 URL 公开可用,然后指示用户使用 podspec 方式在他们的Podfile 中安装您的 pod:

      use_frameworks!
      
      target 'TargetName' do
        pod '<POD_NAME>', podspec: '<URL_TO_YOUR_PODSPEC_FILE>.podspec'
      end
      

      私有:同样的方法也适用于私有分发, 只要您的用户是唯一知道或有权访问的用户 podspec URL。

    通过 Github 存储库分发

    虽然我不建议将二进制文件(即.xcframework)提交到 git 存储库中,但您几乎可以使用 git 存储库执行相同操作,但无需压缩您的 .xcframework 文件。

    创建一个 git 存储库并添加 .xcframework 文件和一个 .podspec 文件,如下所示:

    Pod::Spec.new do |s|
        s.name = '<POD_NAME>'
        s.version = '<VERSION>'
        s.summary = '<SUMMARY>'
        s.description = <<-DESC
        <DESCRIPTION>
                             DESC
      
        s.homepage = '<A_URL_TO_A_WEBPAGE>'
        s.author = { '<AUTHOR_NAME>' => '<AUTHOR_EMAIL>' }
        s.source = { :git => '<URL_TO_YOUR_GIT_REPO>.git', :tag => s.version.to_s }
    
        ...
    
        s.vendored_frameworks = '<PATH_OF_XCFRAMEWORK_FILE_IN_THE_REPO>.xcframework'
    end
    

    Public:然后你可以通过 cocoapods specs repo 分发你的 pod,方法是将你的 .podspec 文件推送到 cocoapods 主干,如下所示:

    pod trunk push <PATH_TO_YOUR_PODSPEC_FILE>.podspec
    

    私有:对于私有分发,您可以创建私有规范存储库并使用以下命令推送您的 podspec:

    pod repo push <REPO_NAME> <PATH_TO_YOUR_PODSPEC_FILE>.podspec
    

    【讨论】:

    • 以上两种方法不都是公开分发框架的方式吗?我希望使用 pod 将分发私有化。
    • @Nitish 抱歉,分发受众不是很清楚,我认为这将是公开的。那么,您想将您的 pod 作为框架 分发并使用 私有规范 repo
    • 是的,没错。作为 pod 的框架,但带有私有仓库。
    • @Nitish 在这种情况下,您绝对可以使用第二种方法,但无需推送到 cocoapods 树干。我正在检查第一个是否也有效。
    • 在这个链接中提到here,我们需要在 git 上添加我们想要提供访问权限的用户(如果我们有一个 pod)。我不确定这是否是可行的解决方案,因为我不想在 git overtime 上添加用户,而新用户想要使用我的库。
    【解决方案2】:

    如果我正确理解您的意图,您希望在不打开源代码的情况下公开您的库。在这种情况下,您应该查看 GoogleWebRTC 的示例。这是他们的pods config

    在这种情况下,您的 cocoapod 库将只是构建框架的容器。例如,您可以创建一个公共存储库,它将存储 cocoapods 和构建框架本身所需的信息。我认为甚至可以配置 github 以将构建从您的私人仓库发布到公共仓库,但这可能有点挑战。

    您可以查看this guide

    【讨论】:

    • 但是代码是公开的。我可以看到源代码。
    • 如果您说的是我包含的 pod 配置链接,它是 cocoapods 存储库中的 pod 配置文件 - 它包含所有公共 pod 的配置。通常你只在你的 podfile 中提到一个名字,所以需要有一个真实的来源。此特定配置仅包含指向已构建 GoogleWebRTC.framework (dl.google.com/dl/cpdc/eae5bee0861b6f47/…) 的链接,并且没有源代码。我添加了一个指向如何制作这种 pod 的指南的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多