Xcode 具有静态共享库的猕猴桃和椰子荚
我有一个包含3个项目的工作区:Xcode 具有静态共享库的猕猴桃和椰子荚,xcode,cocoapods,kiwi,Xcode,Cocoapods,Kiwi,我有一个包含3个项目的工作区: MyApp 普通的 豆荚 Common是MyApp所依赖的公共库。我想设置椰子荚和猕猴桃在这个项目中正常工作。我该怎么办 我发现了,但当我尝试采用这种方法时,在我尝试添加猕猴桃之前,我在构建MyApp时遇到了一个错误: ld: library not found for -lPods 以下是GitHub的回购协议: 我的播客文件是: workspace 'MyApp.xcworkspace' platform :ios, '7.0' target 'Com
- MyApp
- 普通的
- 豆荚
ld: library not found for -lPods
以下是GitHub的回购协议:
我的播客文件是:
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
我不知道如何修复您的设置,但如果我是您,我会将
设置为通用的。POD可以是私有的,只作为回购协议存储在GitHub中。当然,您需要一个用于Common
的podspec,但我为我们的构建服务构建了一个示例来测试该设置,我花了不到30分钟的时间就完成了
然后在MyApp的播客文件中,您可以执行以下操作:
pod'Common',:git=>'git@github.com:lyahdav/Common.git',:commit=>a1b2c3d'
而AFNetworking
和Reachability
可以在Common
的podspec中引用(假设这是正确的依赖项)
此设置还允许您在正在构建的任何其他应用程序中包含Common
,而无需嵌入代码。再一次,对你想要实现的目标做出假设,如果这不正确,那么就为问题添加更多细节。你可以破解一个可能再次崩溃的解决方案,或者更好的是,如果你的库很常见,那么也可以开始在你的公共库中使用CoCoapod
它将显示为一个本地的“DVELOPTION Pod”,这意味着您也可以直接编辑库代码
要轻松开始,只需在根文件夹中创建一个Common.podspec:
$pod lib创建公共文件
然后只需编辑所需的最小值,例如平台
,源文件
,要求弧
和依赖项
(如果有)
您可以在更改库时查看库的外观(并将其与手动创建的公共库进行比较):
$pod lib lint--无干净的通用.podspec
最后,从您的工作区中删除不再需要的公共文件,并将其添加到您的Podfile中:
pod'Common',:path=>“../Relative/path/To/CommonSources/”
这将花费你不超过30分钟的时间,在这个过程中你会学到很多东西
接下来,您可以看看如何制作pod存储库。我终于找到了一个可行的解决方案。以下是播客文件:
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显示了MyApp和Common都配置为使用Kiwi进行测试,并且它们都可以使用pod(在这个示例中是cupertinoyanke)
我确实需要在Xcode中手动配置MyApp与Common的链接,并执行以下步骤:
在MyApp项目设置>MyApp目标>构建阶段>链接中
带库的二进制文件>添加libCommon.a
在MyApp项目设置>生成设置>用户标题搜索路径>添加${SRCROOT}/Common/Common/**
本回购协议有一个有效的例子:
唯一一件我没有弄明白的有点恼人的事情是,是否有办法不复制我想在MyApp和Common中使用的每个pod。如果有人有一个解决方案可以完成我的解决方案的所有功能并解决了这个问题,我很乐意将其标记为公认的答案。发布。以下是他的答案:
我对存储库进行了分叉,并对新的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
这种方法的问题是,这意味着普通Pod将在其自身的回购协议中。这意味着我要维持两份回购协议,在我的情况下,这似乎是不必要的开销。或者有没有办法缓解这种情况?我希望能够分离公共代码,主要是为了分离关注点,这样我可以在公共库上更快地进行TDD。现在,当我想运行一个与公共代码相关的测试时,它必须构建整个项目,因为它的大小,每次大约需要20秒。仅使用公共代码就可以更快地构建。您可以将Common
和MyApp
都放入顶级目录中的子目录中,用于回购,并使用:path
方法引用公共pod,而不是:git
(请参阅@Rivera的答案)。这种方法并没有给你带来将公共代码库隔离出来用于其他应用程序的好处,但如果这不是你的目标,可能会更简单。我倾向于较小的单一用途回购,但这只是个人偏好。我尝试了:path
方法,但我一直在研究如何为公共项目创建Kiwi测试套件,我可以从与MyApp
相同的Xcode工作区运行该套件。我尝试创建一个新项目作为工作区的一部分,该工作区依赖于Pods项目,并且我尝试在那里编写测试(目前使用XTest)以在公共项目中执行代码,但是我收到一个链接器错误,对于我尝试在测试中使用的类,该错误是未定义符号
。知道该如何设置该位吗?我希望公共测试将在公共项目中进行。有没有理由不这样做?任何对MyApp workspace的操作都会破坏您通过将公共内容移动到Pod中而创建的隔离,这很可能会导致脆弱的配置。如果有帮助的话,我很乐意加入聊天,而不是创建一个巨大的评论帖子。很抱歉忽略了这一点,我刚刚发布了一个解决我具体问题的答案。我希望公共测试成为公共项目的一部分,但我希望能够从与MyApp相同的Xcode工作区运行它们。我在我的解决方案中实现了这一点(通过切换到公共方案并运行测试)。我喜欢这种方法,只是我不知道如何为公共库创建一个单独的Kiwi测试套件,以便在相同的Xcode工作区中运行。