Kiwi和CocoaPods带有静态共享库

时间:2014-03-28 00:04:52

标签: xcode cocoapods kiwi

我有一个包含3个项目的工作区:

  • MyApp的
  • 通用

Common是MyApp所依赖的通用库。我想设置CocoaPods和Kiwi在这个项目中正常工作。我该怎么做?

我找到https://stackoverflow.com/a/16472563/62,但是当我尝试遵循这种方法时,在我尝试添加Kiwi之前构建MyApp时出错:

ld: library not found for -lPods

这是GitHub上的回购:https://github.com/lyahdav/cocoapods_kiwi_shared_library

我的Podfile是:

workspace 'MyApp.xcworkspace'
platform :ios, '7.0'

target 'Common' do
  xcodeproj 'Common/Common.xcodeproj'

  pod 'AFNetworking'
  pod 'Reachability'

  target 'MyApp', :exclusive => true do
    xcodeproj 'MyApp.xcodeproj'
  end
end

4 个答案:

答案 0 :(得分:2)

我终于找到了一个有效的解决方案。这是Podfile:

platform :ios, '7.0'

workspace 'MyApp.xcworkspace'

xcodeproj 'MyApp'

pod 'CupertinoYankee', '~> 1.0'

target :MyAppTests, :exclusive => true do
    pod 'Kiwi/XCTest'
end

target :Common, :exclusive => true do
    xcodeproj 'Common/Common'
    pod 'CupertinoYankee', '~> 1.0'
end

target :CommonTests, :exclusive => true do
    xcodeproj 'Common/Common'
    pod 'Kiwi/XCTest'
end

此示例Podfile显示配置为使用Kiwi进行测试的MyApp和Common,并且它们都可以使用pod(在此示例中为CupertinoYankee)。

我手动必须在Xcode中配置MyApp与Common链接以及以下步骤:

  1. 在MyApp项目设置中> MyApp目标>构建阶段>链接 Binary With Libraries>添加libCommon.a
  2. 在MyApp项目设置中&gt;构建设置&gt; <用户标题搜索路径>添加${SRCROOT}/Common/Common/**
  3. 此repo有一个工作示例:https://github.com/lyahdav/cocoapods_kiwi_shared_library

    我唯一没有想到的有点烦人的事情是,有没有办法不复制我想在MyApp和Common中使用的每个pod。如果有人有解决方案可以完成我的解决方案所做的所有事情并解决了这个问题,我很乐意将其标记为已接受的答案。

答案 1 :(得分:1)

发布as an edit by anonymous user。这是他的答案:

我已经分叉了存储库并对新的cocoapods版本进行了一些更改,以使其仍然有效。

platform :ios, '8.0'

workspace 'MyApp.xcworkspace'

project 'MyApp'

target :MyApp do
    pod 'CupertinoYankee', '~> 1.0'
end

target :MyAppTests do
    pod 'Kiwi/XCTest'
end

target :Common do
    project 'Common/Common'
    pod 'CupertinoYankee', '~> 1.0'
end

target :CommonTests do
    project 'Common/Common'
    pod 'Kiwi/XCTest'
end

https://github.com/chrishunterkiller/cocoapods_kiwi_shared_library

答案 2 :(得分:0)

我不确定如何修复你的设置,但如果我是你,我会将Common变成自己的Pod。 Pod可以是私有的,只是作为回购存储在GitHub中。当然,你需要Common的podspec,但我构建了一个样本来测试我们的构建服务的设置,我花了不到30分钟才能做到正确。

然后在你的Podfile for MyApp中,你可以这样做:

pod 'Common', :git => 'git@github.com:lyahdav/Common.git', :commit => 'a1b2c3d'

AFNetworkingReachability可以在Common的podspec中引用(假设它是正确的依赖关系)。

此设置还允许您将Common包含在您正在构建的任何其他应用中,而无需嵌入代码。再次,假设你正在尝试实现的目标,如果这不正确,请在问题中添加更多细节。

答案 3 :(得分:0)

你可以破解一个可能再次破坏的解决方案,或者更好,因为Common是你的库,也开始在你的Common库中使用CocoaPods。

它将显示为本地&#34; Dvelopment Pod&#34;,这意味着您也可以直接编辑库代码。

要轻松开始,只需在根文件夹中创建一个Common.podspec:

$ pod lib create Common

然后,只需修改所需的最低parameters,例如platformsource_filesrequires_arcdependency,如果有的话。

您可以在更改库时查看库的外观(并将其与手动创建的公共库进行比较):

$ pod lib lint --no-clean Common.podspec

最后从工作区中删除不再需要的Common并将其添加到Podfile:

pod 'Common', :path => '../Relative/Path/To/CommonSources/'

这将花费你不超过30分钟,你将在这个过程中学到很多东西。

接下来,您可以查看制作private pod存储库。

相关问题