Cocoapods - 为私有 iOS 存储库创建 pod

问题描述 投票:0回答:3

我有一个包含代码的存储库,我不想与其他人共享。但我想要一个其他人可以集成到他们的应用程序中的 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
3个回答
7
投票

要分发闭源 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

之后有2种方法来分发:

  • Public:如果您想通过 cocoapods 规范存储库分发您的 pod,您可以将您的

    .podspec
    文件推送到 cocoapods 遵循this指南的主干:

    pod trunk push <PATH_TO_YOUR_PODSPEC_FILE>.podspec
    

    用户的安装将像任何其他 Pod 一样:

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

    私人:对于私人分发,请遵循this指南,创建一个 私有规范存储库并使用以下命令推送您的 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 公开,然后指导用户使用 他们的 Podfile 中的
    podspec
    方式来安装你的 pod:

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

    Private:同样的方法也适用于私人发行, 只要您的用户是唯一知道或有权访问的用户 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 规范存储库分发您的 pod,方法是将您的

.podspec
文件推送到 cocoapods 主干,如下所示:

pod trunk push <PATH_TO_YOUR_PODSPEC_FILE>.podspec

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

pod repo push <REPO_NAME> <PATH_TO_YOUR_PODSPEC_FILE>.podspec

1
投票

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

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

您可以查看本指南


0
投票

这对我有用

为模拟器创建xcarchive

  xcodebuild archive \
  -scheme BClient \
  -archivePath "archives/BClient-iOS-simulator.xcarchive" \
  -destination "generic/platform=iOS Simulator" \
  -sdk iphonesimulator \
  SKIP_INSTALL=NO \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES
  

为设备创建xcarchive

  xcodebuild archive \
  -scheme BClient \
  -archivePath "archives/BClient-iOS.xcarchive" \
  -destination "generic/platform=iOS" \
  -sdk iphoneos \
  SKIP_INSTALL=NO \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES

我将它们组合起来得到xcframework框架

   xcodebuild -create-xcframework \
  -framework "archives/BClient-      iOS.xcarchive/Products/Library/Frameworks/BClient.framework" \
  -framework "archives/BClient-iOS-      simulator.xcarchive/Products/Library/Frameworks/BClient.framework" \
  -output "BClient.xcframework"

之后,我压缩 BClient.xcframework 以获得 BClient.zip 我将其发布到公共存储库以获取如下网址:https://github.com/******example/raw/main/BClient.zip

对于 BClient.podspec :

   Pod::Spec.new do |spec|

   spec.name = "BClient"

   spec.version = "0.0.6"

   spec.summary = "B Client iOS"

   spec.description = "B Client for iOS"

   spec.homepage = "example.com"

   spec.license = { :type => "MIT", :file => "LICENSE" }

   spec.author = { "B O" => "[email protected]" }

   spec.platform = :ios, "15.2"

   spec.swift_version = '5.9'

   spec.source = { :http => 'https://github.com/******example/raw/main/BClient.zip' }
    spec.ios.vendored_frameworks = 'BClient.xcframework'

   end

配置完成后,命令成功通过:

  pod trunk push BClient.podspec --verbose --allow-warnings --use-libraries
© www.soinside.com 2019 - 2024. All rights reserved.