具有以下项目结构:

  • 应用程序目标位于Xcode项目(App.xcodeproj)上,而框架目标则位于其他Xcode项目(Framework.xcodeproj)上。
  • 应用程序目标取决于“ Material ” Pane
  • Framework目标取决于AFNetworking pod。

  • CocoaPods支持这种设置吗?

    我的第一个尝试是做这样的事情:
    platform :ios, '9.0'
    use_frameworks!
    
    target 'App' do
      workspace 'App.xcworkspace'
      project 'App.xcodeproj'
      pod 'Material'
    end
    
    target 'Framework' do
      workspace 'App.xcworkspace'
      project 'Framework/Framework.xcodeproj'
      pod 'AFNetworking'
    end
    

    但是应用程序在启动时崩溃,并显示以下错误:
    dyld: Library not loaded: @rpath/AFNetworking.framework/AFNetworking
    
    Referenced from: /Users/ruenzuo/Library/Developer/Xcode/DerivedData/App-aayvulxvruuarudtheuilepmmctk/Build/Products/Debug-iphonesimulator/Framework.framework/Framework
    
    Reason: image not found
    

    这是有道理的,因为CocoaPods不知道应用程序和框架是否相关。实际上,在pod安装之后,我会收到以下警告:
    [!] The Podfile contains framework targets, for which the Podfile does not contain host targets (targets which embed the framework).
    If this project is for doing framework development, you can ignore this message. Otherwise, add a target to the Podfile that embeds these frameworks to make this message go away (e.g. a test target).
    

    然后,我尝试将Framework目标嵌入到Application目标中,如下所示:
    platform :ios, '9.0'
    
    use_frameworks!
    
    target 'App' do
      workspace 'App.xcworkspace'
      project 'App.xcodeproj'
      pod 'Material'
      target 'Framework' do
        workspace 'App.xcworkspace'
        project 'Framework/Framework.xcodeproj'
        pod 'AFNetworking'
      end
    end
    

    但这没有用。我设法使其正常工作的唯一方法是:
    platform :ios, '9.0'
    use_frameworks!
    
    target 'App' do
      workspace 'App.xcworkspace'
      project 'App.xcodeproj'
      pod 'Material'
      pod 'AFNetworking'
    end
    
    target 'Framework' do
      workspace 'App.xcworkspace'
      project 'Framework/Framework.xcodeproj'
      pod 'AFNetworking'
    end
    

    但是重复使用AFNetworking连盒就感觉我做错了。另外,我也没有摆脱警告,因此很明显,我只是通过使CocoaPods通过AFNetworking Pane 复制到应用程序Frameworks目录来强制其工作。

    有没有人设法使类似的东西工作?

    最佳答案

    技巧是将框架目标添加到应用程序目标的“目标依赖项”构建阶段,如下所示:

    ios - 如何正确设置同时具有框架目标和使用该框架的应用程序目标的Podfile-LMLPHP

    由于某些原因,CocoaPods依赖于“目标依赖项”-仅使您的库/框架处于“与二进制库链接”阶段是不够的。您的Podfile应该如下所示:

    project 'CocoapodsTest'
    
    target 'CocoapodsTest' do
        pod 'AFNetworking'
    end
    
    target 'SampleLibrary' do
        pod 'Masonry'
    end
    

    运行pod install之后,您可以检查应用程序目标的“其他链接器标志”,以验证它是否将应用程序和库的依赖项都转发到链接器:

    ios - 如何正确设置同时具有框架目标和使用该框架的应用程序目标的Podfile-LMLPHP

    关于ios - 如何正确设置同时具有框架目标和使用该框架的应用程序目标的Podfile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43400739/

    10-14 13:21
    查看更多