将Objective-C代码组织到子模块中?的CocoaPods?

时间:2014-02-18 00:34:51

标签: ios objective-c git cocoapods

我们正在开发一个小型SDK。我们在工作区内的一个项目中拥有所有代码。我们想重构它以创建可以在以后重复使用的不同子模块。 让我们将我们的SDK看作TestFlight / FlightPath,包含用于分析,日志记录,用户反馈等的子模块。

理想情况下,我们有一个git repo,其中分离了Analytics,并且SDK可以使用一个简单的API,同样适用于其他组件。这非常适合单元测试,版本管理等。

我们尝试使用cocoapods,但我们发现的问题是静态库无法链接到另一个静态库,或者至少没有一种简单/自动化的方法。 (如果我们错了,请纠正我们。)

我们仍然可以尝试使用cocoapods将代码(标题和实现文件)带到同一个恶作剧空间然后以某种方式有一个脚本将它们复制到正确的项目并将它们链接到它(这听起来像是做git子模块)。

在Objective-C中,静态库之间的版本/依赖关系管理是否有任何帮助? 有什么方法可以促进这个过程吗?

理想情况下,我们希望最终得到以下内容,其中一切都是库或可以重复使用的独立模块:

SDK
   Analytics
      Logging
   UserFeedback
      Logging
   SubcomponentA
   SubcomponentB
      Logging
   SubcomponentC

更新

当我们尝试使用cocoapods时,我们的主工作区上的Podfile就是这样的:

# workspace 'MyWorkspace/MyWorkspace.xcworkspace'
platform :ios, '7.0'
xcodeproj 'MyWorkspace/MySDK/MySDK.xcodeproj'

target 'MySDK' do
    xcodeproj 'MyWorkspace/MySDK/MySDK.xcodeproj'

    pod 'Analytics', '0.0.1'
end

其中MyWorkspace是已存在的工作区,其中包含不同的项目(全部在同一目录中),MySDK是最终产品(静态库),Analytics是其中之一组件位于自己的私有存储库中。所以cocoapods试图将Analytics静态库与MySQK静态库(?)

链接起来

我们的私人规格报告(PodSpecs/Analytics/0.0.1/Analytics.podspec):

Pod::Spec.new do |s|
  s.name     = 'Analytics'
  s.version  = '0.0.1'
  s.platform = :ios
  s.summary  = "Analytics utility"
  s.homepage = 'http://apple.com'
  s.author   = { 'Dude' => 'dude@apple.com' }
  s.source   = { :git => 'https://github.com/Company/Analytics.git', :tag => '0.0.1' }
  s.source_files = 'Analytics/**/*.{h,m}'
  s.requires_arc = true
  s.ios.deployment_target = '6.0'
end

1 个答案:

答案 0 :(得分:0)

听起来你正在寻找在CocoaPods中有subspecsdependencies。这允许您定义要在不同配置中重用的不同代码段。

如果您正在寻找更强大的示例,请查看AFNetworking podspec


编辑:在聊天中进行了一些讨论后,发现该pod未与项目文件正确集成。发生这种情况时,请删除Pods,并确保Pods.xcodeproj与正确的项目集成。

CP中可能还有一个错误,即涉及在包含多个项目的文件夹中进行集成。如果这是真的,我会用一个问题更新这篇文章。