更新到 1.0.0 后 cocoapods link_with 出错
Posted
技术标签:
【中文标题】更新到 1.0.0 后 cocoapods link_with 出错【英文标题】:Error with cocoapods link_with after update to 1.0.0 【发布时间】:2016-05-17 15:14:02 【问题描述】:我今天已将 cocoapods 更新到 1.0.0 版本。我在更新 pod 时得到了这个字符串:
[!] Invalid Podfile file: [!] The specification of link_with in the Podfile is now unsupported, please use target blocks instead..
我已在我的 podFile 中删除了 link_with,但我无法构建项目,因为我有很多 Match-O-Linker。有谁知道我应该如何解决这个问题?
这是我现在的 Podfile:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
inhibit_all_warnings!
pod 'pop', '~> 1.0'
pod 'AFNetworking', '~> 1.3'
pod 'SDWebImage', '~> 3.7'
pod 'GoogleAnalytics', '~> 3'
pod 'ARAnalytics' , :subspecs => ["Crashlytics", "Amplitude", "DSL"]
pod 'FBSDKCoreKit', '~> 4.10.1'
pod 'FBSDKLoginKit', '~> 4.10.1'
pod 'FBSDKShareKit', '~> 4.10.1'
pod 'Google/SignIn'
pod 'Branch'
pod 'Leanplum-iOS-SDK'
pod 'Fabric', '1.6.7'
pod 'Crashlytics', '3.7.0'
pod 'TwitterKit'
pod 'Digits'
target 'minubeTests' do
pod 'OCMockito'
end
【问题讨论】:
根据 2016 年 6 月 13 日在旧金山举行的 CocoaPods 核心团队介绍,不推荐使用def ... end
的解决方案。推荐的解决方案是abstract_target ... do ... end
。
接受的答案不是正确的。
并不代表它的权利。
非常完美,我将我的 pod 分成两个 def,它对手表、小部件和应用程序都有好处,谢谢!
【参考方案1】:
试试这个。对多个目标都有效。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
def myPods
pod 'pop', '~> 1.0'
pod 'AFNetworking', '~> 1.3'
pod 'SDWebImage', '~> 3.7'
pod 'GoogleAnalytics', '~> 3'
pod 'ARAnalytics' , :subspecs => ["Crashlytics", "Amplitude", "DSL"]
pod 'FBSDKCoreKit', '~> 4.10.1'
pod 'FBSDKLoginKit', '~> 4.10.1'
pod 'FBSDKShareKit', '~> 4.10.1'
pod 'Google/SignIn'
pod 'Branch'
pod 'Leanplum-iOS-SDK'
pod 'Fabric', '1.6.7'
pod 'Crashlytics', '3.7.0'
pod 'TwitterKit'
pod 'Digits'
end
target 'yourTargetOne' do
myPods
end
target 'yourTargetTwo' do
myPods
end
target 'minubeTests' do
pod 'OCMockito'
end
【讨论】:
这不是官方记录的方法。 值得为一个可行的解决方案投票,但没有正式记录的 Cocoapods 方法 根据 2016 年 6 月 13 日旧金山的 CocoaPods 核心团队介绍,不推荐使用def ... end
的解决方案。推荐的解决方案是abstract_target ... do ... end
。
很想知道不推荐这样做的具体原因为什么...文章链接就足够了。
您应该始终使用官方记录的方法。这不是一个。在***.com/a/37598195/4153728下方查看我的答案@【参考方案2】:
根据新的官方 CocoaPods specification 从 1.0 版本开始,新模型是这样的:
请注意,
BasePods
不是项目中任何目标的实际名称。
TargetNameOne
和 TargetNameTwo
是真实姓名。
platform :ios, '8.1'
inhibit_all_warnings!
abstract_target 'BasePods' do
## Networking
pod 'AFNetworking', '~> 2.6'
# Twitter
pod 'TwitterKit', '~> 1.9'
pod 'Fabric'
# Specify your actual targets
target 'TargetNameOne'
target 'TargetNameTwo'
end
编辑 - 现在Podfile
的根有一个隐含的抽象目标,所以你可以将上面的例子写成:
platform :ios, '8.1'
inhibit_all_warnings!
## Networking
pod 'AFNetworking', '~> 2.6'
# Twitter
pod 'TwitterKit', '~> 1.9'
pod 'Fabric'
# Specify your actual targets
target 'TargetNameOne'
target 'TargetNameTwo'
这适用于最常见的多个目标,但也可以用于单个目标,我喜欢一种通用模式。
【讨论】:
谢谢,您的回答解决了我的问题。Pod 版本 1.0.1 这行得通,我也不得不将 xcodeproj 更改为项目 这是每个 cocoapods 文档的正确答案。【参考方案3】:使用新的specification。您的所有 pod 都应基于指定的目标。 将您的 pod 文件更改为
platform :ios, '8.0'
# change minube to whatever name is of you main target
target 'minube' do
pod 'pop', '~> 1.0'
pod 'AFNetworking', '~> 1.3'
pod 'SDWebImage', '~> 3.7'
pod 'GoogleAnalytics', '~> 3'
pod 'ARAnalytics' , :subspecs => ["Crashlytics", "Amplitude", "DSL"]
pod 'FBSDKCoreKit', '~> 4.10.1'
pod 'FBSDKLoginKit', '~> 4.10.1'
pod 'FBSDKShareKit', '~> 4.10.1'
pod 'Google/SignIn'
pod 'Branch'
pod 'Leanplum-iOS-SDK'
pod 'Fabric', '1.6.7'
pod 'Crashlytics', '3.7.0'
pod 'TwitterKit'
pod 'Digits'
end
target 'minubeTests' do
pod 'OCMockito'
end
【讨论】:
以上是关于更新到 1.0.0 后 cocoapods link_with 出错的主要内容,如果未能解决你的问题,请参考以下文章
将 CocoaPods 更新到 0.36.x 及以上版本后如何引用 Bridging-Header.h 中的头文件?