gpt4 book ai didi

ios - 使用现有静态库和 iOS 应用程序配置 Cocoapods

转载 作者:IT王子 更新时间:2023-10-29 07:54:23 25 4
gpt4 key购买 nike

我在使用 Cocoapods 正确编译我的工作区时遇到了问题。工作区中有 3 个项目,每个项目都有自己的目标:

  1. libPods - 具有所有外部依赖项的 Cocoapods 静态库
  2. libCommon - 我的静态库,用于保存所有共享代码(基本 Controller 、网络代码、通用 UI 等)
  3. myApp - 我的 iOS 应用程序

libCommon 和 myApp 都需要来自 libPods 的外部依赖项。最初我认为它会像这样工作:

  1. libPods 构建
  2. 针对 libPod 和构建的 libCommon 链接
  3. myApp 与 libCommon 链接并构建

在这种情况下,libCommon“拥有”pod,然后 myApp 只是链接到 libCommon,就像我一直在使用 pre-Cocoapods 一样……但显然静态库不喜欢与静态库链接(我得到了一堆动态库错误)。我在某个地方读到一个 github 问题,我应该构建 libPods 和 libCommon,然后 myApp 应该链接到这两个库。现在我的播客文件看起来像这样:

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 中的其中一个类之前,这构建正常。一旦我这样做了,我就会得到其中一个 _OBJC_CLASS_$_Blah 错误(它告诉我虽然 header 可用,但它仍然没有正确链接)。当我尝试在“Build Phases”中手动链接 libCommon 时,出现了一堆重复的符号错误(这让我相信它已经链接了?)。什么鬼?

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

最佳答案

CocoaPods 创建一个隐含的根目标,它默认链接到项目的第一个目标。当您创建另一个目标并且 link_with 选项未被子目标定义继承时,您的设置不起作用。为了制作 link_with 选项,您可以将其移动到 MyApp 目标定义的 block 内。

由于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com