更新到 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 不是项目中任何目标的实际名称。

TargetNameOneTargetNameTwo 是真实姓名。

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 更新后不再构建项目?

iOS CocoaPods自动管理第三方开源库

iOS CocoaPods自动管理第三方开源库

将 CocoaPods 更新到 0.36.x 及以上版本后如何引用 Bridging-Header.h 中的头文件?

将 CocoaPods 更新到 0.36.x 及以上版本后如何引用 Bridging-Header.h 中的头文件?

pod install 在1.0.0.beta.1 cocoapods版本显示错误