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

Rue*_*zuo 7 xcode objective-c ios cocoapods swift

拥有以下项目结构:

  • 应用程序目标驻留在Xcode项目(App.xcodeproj)上取决于驻留在不同Xcode项目(Framework.xcodeproj)上的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
Run Code Online (Sandbox Code Playgroud)

但是应用程序在启动时崩溃,出现以下错误:

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
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为CocoaPods不知道App和Framework是相关的.事实上,在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).
Run Code Online (Sandbox Code Playgroud)

然后我尝试将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
Run Code Online (Sandbox Code Playgroud)

但它没有用.我设法让它运作的唯一方法是:

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
Run Code Online (Sandbox Code Playgroud)

但重复使用AFNetworking pod感觉就像我做错了什么.此外,我没有设法摆脱警告,所以显然我只是通过让CocoaPods通过AFNetworking pod复制到应用程序Frameworks目录来强制实现这一点.

有没有人设法得到这样的工作?

Tam*_*ola 3

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

\n\n

Xcode 截图

\n\n

由于某种原因,CocoaPods 依赖于“目标依赖项” \xe2\x80\x93,仅让您的库/框架处于“与二进制库链接”阶段是不够的。你的Podfile应该看起来像这样:

\n\n
project \'CocoapodsTest\'\n\ntarget \'CocoapodsTest\' do\n    pod \'AFNetworking\'\nend\n\ntarget \'SampleLibrary\' do\n    pod \'Masonry\'\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

Xcode 截图

\n