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

Ios 如何正确设置同时具有框架目标和使用该框架的应用程序目标的Podfile,ios,objective-c,swift,xcode,cocoapods,Ios,Objective C,Swift,Xcode,Cocoapods,具有以下项目结构: 应用程序目标位于Xcode项目(App.xcodeproj)上,它依赖于位于不同Xcode项目(Framework.xcodeproj)上的框架目标 应用目标取决于材料吊舱 框架目标取决于AFPOD CocoaPods支持这种设置吗 我的第一次尝试是这样做: platform :ios, '9.0' use_frameworks! target 'App' do workspace 'App.xcworkspace' project 'App.xcodeproj

具有以下项目结构:

  • 应用程序目标位于Xcode项目(App.xcodeproj)上,它依赖于位于不同Xcode项目(Framework.xcodeproj)上的框架目标
  • 应用目标取决于材料吊舱
  • 框架目标取决于AFPOD
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
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
project 'CocoapodsTest'

target 'CocoapodsTest' do
    pod 'AFNetworking'
end

target 'SampleLibrary' do
    pod 'Masonry'
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).
然后,我尝试将框架目标嵌入到应用程序目标中,如下所示:

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
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
project 'CocoapodsTest'

target 'CocoapodsTest' do
    pod 'AFNetworking'
end

target 'SampleLibrary' do
    pod 'Masonry'
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
但是重复使用AFPOD感觉好像我做错了什么。而且,我没有设法消除警告,所以很明显,我只是通过让CoCoapod通过AFNetworking pod复制到ApplicationFrameworks目录来强迫它工作


有人成功地实现了这样的功能吗?

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

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
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
project 'CocoapodsTest'

target 'CocoapodsTest' do
    pod 'AFNetworking'
end

target 'SampleLibrary' do
    pod 'Masonry'
end

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

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
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
project 'CocoapodsTest'

target 'CocoapodsTest' do
    pod 'AFNetworking'
end

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


也许你正在打开你的project.xcode项目。您需要打开yourProject.xcworkspace,而不是yourProject.xcodeproject。在成功安装pods之后。是的,我正在打开正确的文件。