相关疑难解决方法(0)

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

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

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

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

  1. libPods构建
  2. libCommon链接libPods和构建
  3. myApp链接libCommon并构建

在这种情况下,libCommon"拥有"pod,然后myApp只链接libCommon,就像我一直在做Cocoapods之前...但显然静态库不喜欢与静态库链接(我得到了一堆动态库错误).我在某个地方阅读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
Run Code Online (Sandbox Code Playgroud)

通过此设置,myApp拥有所有pod,然后在libCommon构建设置中指定pod标头的路径.这构建正常,直到我尝试使用libCommon中的一个类.一旦我这样做,我得到其中一个_OBJC_CLASS_$_Blah错误(告诉我虽然标题可用,但它仍然没有正确链接).当我尝试在"Build Phases"中手动链接libCommon时,我得到了一堆重复的符号错误(让我相信它已经链接了?).有没有搞错?

有什么方法可以正确地做到这一点,我的podfile应该是什么样子?

xcode static-libraries ios cocoapods

26
推荐指数
2
解决办法
7924
查看次数

使用Cocoapods构建静态库时防止出现重复符号

虽然我已经看到很多关于Cocoapods和静态库的问题,但大多数人似乎都认为你最终会拥有一个带有静态库和最终目标应用程序的工作区.

在我的场景中,我正在构建一个静态库.更具体地说,我正在攻击MyLib.framework供用户使用.我真的很想管理MyLib.framework与Cocoapods的依赖关系,但是当我的库的消费者使用Cocoapods 时,它会产生很多痛点.

例如,我的库有一个AFNetworking依赖项,我用Cocoapods管理它.当我构建我的库时,它链接在libPods.a中,其中包括AFNetworking,以及一些"虚拟"文件/对象.如果我的框架的用户也使用Cocoapods来构建他们的应用程序,他们会看到如下内容:

duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods in:
    /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o)
    /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o)
duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods in:
    /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o)
    /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o)
ld: 2 duplicate symbols for architecture i386
Run Code Online (Sandbox Code Playgroud)

我想如果他们要添加一个AFNetworking依赖项,他们也会得到与AFNetworking相关的重复符号.

我计划最终使用Cocoapods分发MyLib,但我也希望能够分发MyLib.framework本身.

有没有办法在我的库中使用Cocoapods同时使Cocoapods对任何潜在用户都安全?

objective-c static-libraries ios cocoapods

21
推荐指数
3
解决办法
1万
查看次数

Podfile中link_with的真正含义是什么?

我的问题是,我不知道link_with 在我的Podfile中使用后发生了什么,所以我不知道何时何地使用它.我已经阅读了指南,但描述是为了简要了解其含义link_with.

在我的测试之后,我知道如果我在我的Podfile中使用link_with没有target默认的Pods库libPods.a将链接到.But引用的目标,link_with如果targetPodfile中的内容link_with看起来不再使用了.

除此之外,官方指南中没有提到在哪里写link_with,所以当我link_with 'Dummy'target街区看到时我很困惑.

任何人都可以解释何时何地link_with使用link_with 'Dummy'?(我只知道它用于解决库中的重复符号)?

xcode ios cocoapods

2
推荐指数
1
解决办法
3270
查看次数

标签 统计

cocoapods ×3

ios ×3

static-libraries ×2

xcode ×2

objective-c ×1