我无法使用Cocoapods正确编译我的工作区。工作区中有3个项目,每个项目都有自己的目标:

  • libPods-Cocoapods静态库,带有所有外部依赖项
  • libCommon-我的静态库,其中保存所有共享代码(基本 Controller ,网络代码,通用UI等)
  • myApp-我的iOS应用程序

  • libCommon和myApp都需要libPods的外部依赖项。本来我以为它会像这样工作:
  • libPods构建
  • libCommon链接到libPods并构建
  • myApp与libCommon链接并构建

  • 在这种情况下,libCommon“拥有”了Pod,然后myApp就像以前一直在做Cocoapods一样,链接到libCommon……但是显然静态库不喜欢与静态库链接(我有很多动态库错误)。我在某个地方的github问题上读到了我应该构建libPods和libCommon,然后myApp应该链接这两个库。现在我的podfile看起来像这样:
    workspace 'MyApp.xcworkspace'
    platform :ios, '5.0'
    
    link_with ['Common', 'MyApp']
    
    target 'MyApp' do
      xcodeproj 'MyApp.xcodeproj'
    
      pod 'AFNetworking',               '1.1.0'
      pod 'TTTAttributedLabel',         '1.6.0'
      pod 'JSONKit',                    '1.5pre'
      pod 'Reachability',               '3.1.0'
    end
    

    通过此设置,myApp拥有所有Pod,然后在libCommon构 build 置中指定Pod header 的路径。在我尝试使用libCommon中的类之一之前,这会生成OK。一旦执行此操作,我将得到其中一种_OBJC_CLASS_$_Blah错误(这告诉我,尽管 header 可用,但仍未正确链接)。当我尝试在“构建阶段”中手动链接libCommon时,出现了一堆重复的符号错误(这使我相信它已经链接了吗?)。有没有搞错?

    正确执行此操作的方式是什么?我的podfile应该是什么样的?

    最佳答案

    CocoaPods创建一个隐式根目标,默认情况下该根目标与项目的第一个目标链接。当您创建另一个目标并且子目标定义未继承link_with选项时,您的设置无法正常工作。为了使link_with选项可以将其移动到MyApp目标定义的块内。

    由于Common目标与Pod链接,如果您将其与MyApp链接,则将导致重复符号错误,因为该应用程序与Common链接。在这种情况下,您只需要使 header 可用于MyApp目标即可。这样做很简单,但是还没有合适的DSL,因此目前作为解决方案还是有点棘手(但受支持)。

    workspace 'MyApp.xcworkspace'
    platform :ios, '5.0'
    
    target 'Common' do
      pod 'AFNetworking',               '1.1.0'
      pod 'TTTAttributedLabel',         '1.6.0'
      pod 'JSONKit',                    '1.5pre'
      pod 'Reachability',               '3.1.0'
    
      target 'MyApp', :exclusive => true do
        xcodeproj 'MyApp.xcodeproj'
      end
    end
    

    关于ios - 使用现有的静态库和iOS应用程序配置Cocoapods,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16451635/

    10-09 16:13