我有一个包含代码的存储库,我不想与其他人共享。但我想要一个其他人可以集成到他们的应用程序中的 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,您首先需要修改您的私有存储库,以便可以生成
.xcframework
文件。
您必须压缩
.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。
虽然我不建议将二进制文件(即
.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
这对我有用
为模拟器创建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