CocoaPod 库 + 单个工作区中的项目,单独的 GIT 存储库

Mat*_*haw 5 git xcode cocoapods

我试图围绕这个复杂的设置:

我有两个项目和一个共享库。共享库是一个 cocoapod。

我希望能够使用单个工作区进行开发。有一些重复的 pod 定义,但我在单个 Podfile 中进行了这项工作。

这就是它变得复杂的地方:

我希望每个项目/库都在自己的 git 存储库中。每个 repo 必须能够独立存在;拥有自己的 Podfile,通过 CI 等进行测试/部署。

另一个扳手:我们是git-flow分支策略...项目A/B的master分支必须拉库的master分支。项目 A/B 的开发分支必须拉取库的开发分支。

有没有人想过这个?我是在以一种倒退的方式来解决这个问题吗?

这是一个工作的根工作区 Podfile:

platform :ios, "7.0"
inhibit_all_warnings!

workspace 'Root.xcworkspace'
xcodeproj 'SharedLibrary/SharedLibrary.xcodeproj'
xcodeproj 'ProjectA/ProjectA.xcodeproj'
xcodeproj 'ProjectB/ProjectB.xcodeproj'

target 'SharedLibrary' do
    xcodeproj 'SharedLibrary/SharedLibrary.xcodeproj'
    pod 'AFNetworking', '~> 2.0'
    pod 'CocoaLumberjack'
end

target 'ProjectA' do
    xcodeproj 'ProjectA/ProjectA.xcodeproj'
    pod 'AFNetworking', '~> 2.0'
    pod 'CocoaLumberjack'
    pod 'MagicalRecord', '~> 2.2'
    pod 'SharedLibrary', :path => './SharedLibrary/'
end

target 'ProjectB' do
    xcodeproj 'ProjectB/ProjectB.xcodeproj'
    pod 'AFNetworking', '~> 2.0'
    pod 'CocoaLumberjack'
    pod 'MagicalRecord', '~> 2.2'
    pod 'SharedLibrary', :path => './SharedLibrary/'
end
Run Code Online (Sandbox Code Playgroud)

这是共享库的 podspec:

Pod::Spec.new do |s|

  s.name         = "SharedLibrary"
  s.version      = "0.0.1"

  s.platform     = :ios, "7.0"
  s.source       = { :git => "http://not.really.uploaded.anywhere.yet/SharedLibrary.git", :tag => "0.0.1" }
  s.source_files  = "SharedLibrary", "SharedLibrary/**/*.{h,m}"
  s.public_header_files = "SharedLibrary/**/*.h"

  s.dependency 'AFNetworking', '~> 2.0'
  s.dependency 'CocoaLumberjack'

end
Run Code Online (Sandbox Code Playgroud)

Jad*_*dar 0

我所做的是为 CocoaPod 库定义一个“专有”目标。独占目标不会与其余 Podfile pod 链接。基本上,您要做的就是定义指向 Xcode 项目的目标。然后,您需要使用 podspec 将 CocoaPod 添加为依赖项。因为它是一个排他目标,所以它不会与自身链接。例如,

source 'https://github.com/CocoaPods/Specs.git'

target 'SharedLibrary', :exclusive => true do
  xcodeproj 'SharedLibrary/SharedLibrary.xcodeproj'
end

pod 'SharedLibrary', :path => 'SharedLibrary/'
Run Code Online (Sandbox Code Playgroud)

做你需要它做的事。唯一需要注意的是,每次向库添加公共标头时,都需要运行pod update才能在项目中使用它。

目标上的 Podfile 语法