到目前为止,我一直在尝试破解这个问题,但是还没有成功。我有一个Xcode Swift项目,并使用其Github存储库进行源代码控制。我想使用此项目创建一个新的CocoaPod。
我已经阅读了CocoaPods文档,但迄今为止没有工作,现在我感到非常困惑,是否有人能够按顺序编写我需要完成新建pod的步骤,因为我的现有Xcode项目已经链接到Github存储库中。
提前感谢!
到目前为止,我一直在尝试破解这个问题,但是还没有成功。我有一个Xcode Swift项目,并使用其Github存储库进行源代码控制。我想使用此项目创建一个新的CocoaPod。
我已经阅读了CocoaPods文档,但迄今为止没有工作,现在我感到非常困惑,是否有人能够按顺序编写我需要完成新建pod的步骤,因为我的现有Xcode项目已经链接到Github存储库中。
提前感谢!
选自Cocoapods文档:
$ pod spec create YourProject
$ edit YourProject.podspec
接着在编辑器中将s.source_files = "Classes", "Classes/**/*.{h,m}"
替换为
s.source_files = "Classes/**/*.{swift}"
然后运行,直到您通过所有测试。
$ pod spec lint YourProject.podspec
那基本上就是全部内容了。
您可以通过创建一个新的演示应用程序,并遵循Anbu.Karthik的9个步骤,在现实生活中测试此Podspec。
在创建的podfile中添加类似于以下内容:
pod 'YourProject', :path => '/Users/you/work/YourProject'
路径应指向包含podspec文件的目录。再次运行 pod install
。
从现有的Xcode项目创建Cocoapod的简单步骤
复制您的存储库网址。打开终端并运行以下命令。
git clone copied your repository url
现在将您的Xcode项目复制到Mac上克隆的存储库文件夹中。现在运行以下命令
git add -u to add all files (if not added use: git add filepath/folder)
git commit -m "your custom message"
git push origin master
创建一个新版本,以前往您的git存储库或运行以下命令
git tag 1.0.0
git push --tags
首先,我们需要确保您已经安装了CocoaPods,并可以在终端中使用。运行以下命令:
sudo gem install cocoapods --pre
创建Podspec
所有的Pod都有一个podspec文件。podspec文件,顾名思义,定义了Pod的规格!现在让我们创建一个,在终端上运行以下命令:
touch PodName.podspec
在添加和修改.podspec文件后,请通过在终端上输入以下命令来验证.podspec文件
pod lib lint
一旦您成功验证并且没有错误,就可以运行以下命令注册并构建cocoapod
pod trunk register
pod trunk push PodName.podspec
如果一切顺利,你会在终端上看到这个结果
成功发布了 PodName (1.0.0)
2月5日 02:32
https://cocoapods.org/pods/PodName
告诉你的朋友们吧!
耶!!!!恭喜您获得了Pod链接。在您想要使用它的任何地方使用它。
您可以使用https://github.com/CocoaPods/Xcodeproj (它已经随Cocoapods一起发布,因此如果您使用后者,则已经拥有前者)来解析您的XCode项目/工作区,并且例如:
spec.source_files
包含所有这些文件由于Podspec是一个Ruby脚本,因此您甚至可以将此过程集成到Podspec本身中,以仅维护单个XCode项目目标源文件并从中更新Podspec。类似以下内容:
require 'xcodeproj'
project = Xcodeproj::Project.open('MySuperProject.xcodeproj')
target = project.targets.select { |target| target.name == 'MyTarget1' }.first
def self.relative_file_paths(build_phase)
folder_path_length = __dir__.length + 1 # add '/' to the end
paths = build_phase.files_references.map{ |f| f.real_path.to_s[folder_path_length..-1] }
puts build_phase, paths
return paths
end
Pod::Spec.new do |s|
s.name = 'MySuperProject'
s.version = '1.0'
s.authors = 'My team'
s.license = 'My License'
s.homepage = 'github.com:me/MySuperProject.git'
s.source = { :git => 'github.me/MySuperProject.git' }
s.summary = 'My Super Project'
headers = (self.relative_file_paths target.headers_build_phase) + ['include/SomeHeader.h']
s.source_files = (self.relative_file_paths target.source_build_phase) + headers
s.public_header_files = headers
end