537

从项目中删除 CocoaPods 的正确方法是什么?我想删除整个 CocoaPod。由于我的客户施加的一些限制,我无法使用它。我只需要一个 xcodeproj 而不是 xcworkspace。

4

21 回答 21

1080

从项目中删除 CocoaPods 是可能的,但目前 CLI 无法自动执行。首先,如果您唯一的问题是无法使用 an ,xcworkspace您可以使用 CocoaPods 和xcodeprojs,方法是使用--no-integrate将生成Pods.xcodeproj但不生成工作区的标志。然后你可以把它xcodeproj作为一个子项目添加到你的 mainxcodeproj中。

如果你真的想删除所有 CocoaPods 集成,你需要做一些事情:

注意如果操作不当,编辑其中一些内容可能会破坏您的主项目。我强烈建议您将项目检查到源代码管理中以防万一。这些说明也适用于 CocoaPods 版本0.39.0,它们可能会随着新版本而改变。

  1. 删除独立文件(Podfile Podfile.lock和您的Pods目录)
  2. 删除生成的xcworkspace
  3. 打开您的xcodeproj文件,删除对Pods.xcconfiglibPods.a(在Frameworks组中)的引用
  4. 在您的Build Phases删除下Copy Pods ResourcesEmbed Pods FrameworksCheck Pods Manifest.lock阶段。
  5. 这似乎很明显,但您需要以其他方式集成第 3 方库或从代码中删除对它们的引用。

在这些步骤之后,您应该使用xcodeproj在集成 CocoaPods 之前存在的单个设置。如果我错过了任何内容,请告诉我,我将对其进行编辑。

此外,我们一直在寻找有关如何改进 CocoaPods 的建议,因此如果您有任何问题,请在我们的问题跟踪器中提交,以便我们找到解决问题的方法!

编辑

正如Jack Wu 在评论中所示,有一个第三方 CocoaPods 插件可以为您自动执行这些步骤。可以在这里找到。请注意,它是第三方插件,当 CocoaPods 存在时,可能并不总是更新。另请注意,它是由 CocoaPods 核心团队成员制作的,因此问题不会成为问题。

于 2013-05-07T20:21:28.690 回答
451

pod deintegrate并且pod clean是从您的项目/存储库中删除 CocoaPod 的两个指定命令。

这是完整的命令集:

$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod cache clean --all
$ rm Podfile

原始解决方案在这里找到:https ://medium.com/@icanhazedit/remove-uninstall-deintegrate-cocoapods-from-your-xcode-ios-project-c4621cee5e42#.wd00fj2e5

CocoaPod 文档pod deintegratehttps ://guides.cocoapods.org/terminal/commands.html#pod_deintegrate

于 2016-01-13T11:16:44.177 回答
75

要从项目中完全删除 pod,您需要先安装两件事...如下(假设您的系统中已经安装了 cocoa-pods。)...

  1. Cocoapods-Deintegrate 插件
  2. Cocoapods-清洁插件

安装

  1. Cocoapods-Deintegrate 插件

    在您的终端上使用以下命令进行安装。

    sudo gem install cocoapods-deintegrate
    
  2. Cocoapods-清洁插件

    在您的终端上使用以下命令进行安装。

    sudo gem install cocoapods-clean
    

用法

首先使用像往常一样的命令转到您的项目文件夹,例如..

cd (path of the project) //Remove the braces after cd

现在使用这两个插件将其完全删除,如下所示..

  1. Cocoapods-Deintegrate 插件

    在您的终端上使用以下命令首先从您的项目中分离 pod。

     pod deintegrate
    

分解 Pod

  1. Cocoapods-清洁插件

    从您的项目中解构 pod 后,在您的终端上使用以下命令彻底清理它。

     pod clean
    

    完成上述任务后,Podfile 应该仍然保留在您的项目目录中..只需手动删除它或在终端上使用以下命令..

     rm Podfile
    

就是这样......现在你的项目没有豆荚......清理了。

从系统中移除 Cocoapods。

任何方式尝试在您的终端上使用以下命令从您的系统中卸载/删除 coca-pods。

sudo gem uninstall cocoapods

它会自动移除古柯豆荚。

谢谢。希望这有帮助。

于 2015-10-03T10:44:29.350 回答
52

我认为有一种更简单的方法可以做到这一点。

正如接受的答案所编辑,现在您可以使用第三方插件cocoapods-deintegrate,它是可靠的,因为它是由 CocoaPods 核心团队成员制作的。

但是,仍然存在一些文件:

Podfile
Podfile.lock
Workspace

您可以手动将它们从您的项目中删除,但还有另一个工具可以帮助您清理它们,感谢cocoapods-clean

最后,卸载工作还没有完成,cocoapods-clean不用清理Podfile,直接运行:

rm Podfile

干杯!

在删除之前,您应该确保您有项目的备份!

于 2015-02-26T07:20:49.587 回答
51

pod deintegrate

在这个 cmd 之后,您的项目中没有留下任何 Cocoapods 的痕迹。

但是您引用 Pods 项目的工作空间仍然存在,您需要手动删除以下 3 个文件:

xx.xcworkspace
Podifle
Podfile.lock

然后您可以再次使用您的项目。

玩得开心!

测试 CocoaPod 版本 = 1.2.0

于 2017-03-17T03:18:09.473 回答
22

我尝试了所有这些答案,但仍然无法构建,最终我尝试了:

pod deintegrate
pod install

这实际上有效!

就像它需要从构建阶段中删除所有 pod 脚本并重新添加它们以使其正常工作,至少在我的情况下是这样。

于 2016-02-17T02:21:47.097 回答
12

Keith 的回答很棒——我只想指出,因为Cocoapods 0.36开始支持Dynamic Frameworks,如果您使用的是“use_frameworks!” 在您的“Podfile”中并且您希望删除 Cocoapods,您必须这样做:

  • Build Phases删除Embed Pods Frameworks阶段。
于 2015-04-02T04:36:15.440 回答
11

从终端 cd 移动到项目文件夹。以下步骤有助于从项目中分离 pod

$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod clean
$ rm Podfile

然后只需打开项目文件并删除 Pod 文件夹,如果它仍然在项目资源管理器中,颜色为红色。构建项目

于 2021-02-15T14:04:53.217 回答
9

开发人员可能面临两个方面。

  • 要么他想从项目中完全删除 pod
  • 开发人员希望从 pod 中卸载项目中的特定框架。

在第一种情况下,您必须使用“pod deintegrate”并按照上面答案中提到的几个步骤进行操作。

对于第二种情况,如果你想卸载安装在你的 pod 文件中的任何特定框架,只需注释你想要卸载的框架并运行 pod install 命令即可。

# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
target 'ProjectName' do
  # Uncomment this line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

    pod 'iCarousel', '~> 1.8'
#    pod 'Facebook-iOS-SDK', '~> 4.1'
#    pod 'ParseFacebookUtilsV4', '~> 1.11'
#    pod 'Parse', '~> 1.14'


end

在这里,我想卸载 facebook 和解析框架(使用 pod 安装)而不是 iCarousel,这就是我像上面那样更新我的 pod 文件的原因。

现在,如果我运行 pod install ,它将保留 iCarousel 在我的项目中,并将删除 facebook 和解析。

于 2016-07-29T12:42:54.007 回答
4
  1. 您需要做的第一件事是删除PodfilePodfile.lockPods文件夹和生成的工作区。
  2. 接下来,在 中.xcodeproj,删除对Pods.xcconfig文件和libPods.a文件的引用。
  3. 在 Build Phases 项目选项卡中,删除 Check Pods Manifest.lock 部分(打开)、Copy Pods Resources 部分(底部)和 Embed Pod Resources(底部)。
  4. 删除Pods.framework.

您可能想要做的唯一一件事就是包含您之前使用的一些库。您可以通过简单地将 pods 文件夹中的任何文件夹拖到您的项目中来做到这一点(我更喜欢将它们放入我的 Supporting Files 文件夹中)。

它对我有用。

于 2015-09-10T06:34:48.850 回答
4
$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod clean
$ rm Podfile
于 2020-01-25T11:43:58.307 回答
3

如果不起作用,请尝试
1. 清理项目。
2. 删除派生数据。

如果您不知道如何删除派生数据,请转到此处

如何在 Xcode6 中“删除派生数据”?

于 2016-06-27T22:18:23.963 回答
2

删除所有相关的 pod 文件:

  • xx.xcworkspace
  • 播客文件
  • Podfile.lock

在项目导航器中:

点击项目名称(蓝色图标)--> Targets (*) --> Build Phases --> 移除“[CP] Check Pods manifests.lock”(点击“x”)

(*) 单击项目名称,您可能必须先单击“显示项目和目标列表”才能看到侧栏。

于 2018-06-28T12:28:14.163 回答
2

如果您只想删除一个 pod 并保留您可能已安装的其他 pod,请在您的应用程序目录中打开 podfile 并删除您要删除的那个。然后使用终端导航到您的应用程序目录并键入:

pod update

这将删除您从 podfile 中删除的 pod。您将看到它已在终端中删除:

Analyzing dependencies
Removing FirebaseUI
Removing UICircularProgressRing

请注意,此方法还将拉取任何更新到您的 podfile 中的其他 pod。你可能想要也可能不想要。

于 2019-03-14T02:52:15.617 回答
1

我将简单地写下 iv 所做的事情(从我的项目中删除任何 CocoaPods)..

  1. 删除任何添加的文件夹(框架、Pods、...)
  2. 删除任何添加的文件(PROJECT.xcworkspace、PodFile、PodFile.lock、Pods-PROJECT.debug.xcconfig、Pods-PROJECT.release.xcconfig、...)
  3. 留下你原来的(PROJECT、PROJECT_Tests、PROJECT.xcodeproj)
  4. 从 xcode 上的项目中删除框架引用

要从 xcode 中删除框架引用:

  1. 使用项目导航器
  2. 选择项目
  3. 选择目标项目
  4. 从顶部选项中选择构建阶段
  5. 保留默认组(Target Dependencies、Compile Sources、Linked Binary with Libraries、Copy Bundle Resources)并删除任何其他
于 2016-03-30T11:15:42.987 回答
1
  1. 从中删除podfile名称.plist
  2. 再次重新安装 pod (使用此链接进行 pod 安装)
于 2016-04-18T13:46:46.027 回答
1

我认为你不再需要解体了。我可以在终端中使用以下命令来做到这一点:

吊舱安装

它会自动删除不再在 podfile 中的那些

于 2020-05-06T03:22:20.670 回答
0

使用这些终端的命令(不要忘记在新行的开头使用 sudo):

open:YourDir YouName$ sudo gem uninstall cocoapods
Password:?
Remove executables:
    pod, sandbox-pod

in addition to the gem? [Yn]  Y
Removing pod
Removing sandbox-pod
Successfully uninstalled cocoapods-1.4.0
open:YourDir YourName$ gem list --local | grep cocoapods
cocoapods-core (1.4.0)
cocoapods-deintegrate (1.0.2)
cocoapods-downloader (1.1.3)
cocoapods-plugins (1.0.0)
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0)
cocoapods-trunk (1.3.0)
cocoapods-try (1.1.0)

像这样一一卸载列表:

open:YourDir YourName$ sudo gem uninstall cocoapods-core
Successfully uninstalled cocoapods-core-1.4.0
open:YourDir YourName$ sudo gem uninstall cocoapods-trunk
Successfully uninstalled cocoapods-trunk-1.3.0
open:YourDir YourName$ sudo gem uninstall cocoapods-try
Successfully uninstalled cocoapods-try-1.1.0
open:YourDir YourName$ gem list --local | grep cocoapods
open:YourDir YourName$ sudo gem uninstall cocoapods-stats
Successfully uninstalled cocoapods-stats-1.0.0
open:YourDir YourName$ sudo gem uninstall cocoapods-search
Successfully uninstalled cocoapods-search-1.0.0
open:YourDir YourName$ sudo gem uninstall cocoapods-downloader
Successfully uninstalled cocoapods-downloader-1.1.3
open:YourDir YourName$ sudo gem uninstall cocoapods-plugins
Successfully uninstalled cocoapods-plugins-1.0.0
open:YourDir YourName$ gem list --local | grep cocoapods
cocoapods-deintegrate (1.0.2)
open:YourDir YourName$ sudo gem uninstall cocoapods-deintegrate
Successfully uninstalled cocoapods-deintegrate-1.0.2
open:YourDir YourName$ sudo gem uninstall cocoapods-stats
Successfully uninstalled cocoapods-stats-1.0.0
open:YourDir YourName$ sudo gem uninstall cocoapods-search
Successfully uninstalled cocoapods-search-1.0.0
open:YourDir YourName$ sudo gem uninstall cocoapods-downloader
Successfully uninstalled cocoapods-downloader-1.1.3
open:YourDir YourName$ sudo gem uninstall cocoapods-plugins
Successfully uninstalled cocoapods-plugins-1.0.0
open:YourDir YourName$ gem list --local | grep cocoapods
cocoapods-deintegrate (1.0.2)
open:YourDir YourName$ sudo gem uninstall cocoapods-deintegrate
Successfully uninstalled cocoapods-deintegrate-1.0.2
于 2018-02-05T15:48:58.760 回答
0

我能够使用 CocoaPods 应用程序(版本 1.5.2)删除项目中的 pod。之后我只删除了文件夹中的 podfile、podfile.lock 和 xcworkspace 文件。

于 2019-04-28T16:46:59.673 回答
0

在此处输入图像描述

详细的图示

于 2019-08-07T03:18:47.713 回答
0

提供的所有答案都是有效且正确的。但是,当您运行pod install并修改包含任何cocoapods配置的任何字段时,clean 和 deintegrate 将按预期停止工作。

就我而言,除其他外,我在构建设置上覆盖了FRAMEWORK_SEARCH_PATHS ,并且在处理 40 个目标时变得乏味......

在此处输入图像描述

在此处输入图像描述

以下 ruby​​ 文件旨在运行 cocoapods 命令以“完全”清理项目,并执行一些额外的清理,例如构建设置,并从项目中删除“Pod”文件夹等。该脚本还可能包含由“clean”或“deintegrate”执行的操作

require 'xcodeproj'

### HELPERS ###
# Array extension for non-Ruby rail
class Array
    # Wraps and object into an array
    #
    # @param object [Any] The object to be wrapped
    # @return [Any] The array with the value wrapped. If the object is nil, then returns empty array
    def self.wrap(object)
        if object.nil?
            []
        elsif object.respond_to?(:to_ary)
            object.to_ary || [object]
        else
            [object]
      end
    end
end

# Performs the cocoapods clean up actions. It will install the dependencies needed.
def cocoapod_clean_actions
    ## DEINTEGRATE
    puts "** Installing Cocoapods 'DEINTEGRATE' **"
    system("sudo gem install cocoapods-deintegrate")
    
    puts "** Performing Cocoapods 'DEINTEGRATE' **"
    system("pod deintegrate")
    
    ## CLEAN
    puts "** Installing Cocoapods 'CLEAN' **"
    system("sudo gem install cocoapods-deintegrate")
    
    puts "** Performing Cocoapods 'CLEAN' **"
    system("pod clean")
end

# Performs a clean up on the build settings removing all the identified pods leftovers
#
# @param project [Xcodeproj] Xcode project where to permorm the actions
def clean_build_settings(project)
    puts "** Removing Cocoapods references from 'BUILD SETTING' **"
    podsOcurrence = "PODS"

    project.targets.each { |target| 
        target.build_configurations.each { |build_configuration|
            puts "Inspecting BUILD_SETTINGS for TARGET => #{target.name} & CONFIGURATION => #{build_configuration.name}"
            build_settings = build_configuration.build_settings
            build_settings.each { |key, value|
                if key.include?(podsOcurrence)
                    build_settings.delete(key)
                else
                    clean(build_settings, key, podsOcurrence)
                end
            }
        }
    }
    project.save()
end

# Performs a clean-up on a specific key of the build settings by removing the occurrences given. It also cleans the value if empty.
#
# @param build_settings [Hash] Build Settings for a specific target and configuration
# @param flag [String] Key to find in the build_settings
# @param occurence [String] The occurence to be removed from the value of build settings key
def clean(build_settings, flag, occurence)
    puts "CLEAN => flag = #{flag}, ocurrence = #{occurence}"
    indexes = Array.new()
    build_settings_flag = Array.wrap(build_settings[flag])
    build_settings_flag.each_with_index { |value, index|
    if value.include?(occurence)
        previous_index = index - 1
            if previous_index >= 0 && build_settings_flag[previous_index].to_s&.start_with?("-")
                indexes.append(previous_index)
            end
            indexes.append(index)
        end
    }

    if indexes.count > 0
        build_settings_flag.delete_if.with_index { |_, index| 
            indexes.include? index
        }

        # Replace the value for the build setting
        if build_settings_flag.empty?
            puts "Removing empty array #{flag}"
            build_settings.delete(flag)
        else 
            puts "Reassining array #{flag}"
            build_settings[flag] = build_settings_flag
        end
    end
end

# Performs a clean up on the build settings removing all the identified pods leftovers
#
# @param project [Xcodeproj] Xcode project where to permorm the actions
def clean_build_phases(project)
    puts "** Removing Cocoapods references from 'BUILD_PHASES' **"
    project.targets.each { |target|
        #if target.name == "WhiteLabel" #TESTING
            puts "Inspecting BUILD_PHASES for TARGET => #{target.name}"
            target.shell_script_build_phases.each { |shell_script| 
                if shell_script.name.include?("[CP]")
                    puts "Removing '#{shell_script.name}' shell script"
                    shell_script.remove_from_project() 
                elsif shell_script.name == "Crashlytics Run Script"
                    puts "Deleting '#{shell_script.name}'"
                    # Add extra build phases such as the Crashlytics
                    #shell_script.remove_from_project()
                end
            }
            #break #TESTING
        #end #TESTING
    }
    project.save()
end

# Removes all the unwanted cocoapods files and folders from the project
#
# @param project [Xcodeproj] Xcode project where to permorm the actions
def remove_files_and_folders(project)
    puts "** Removing Cocoapods files and folders from project **"

    ## Project
    # BE CAREFUL WITH GROUP(LINK) NAME AND GROUP PATH(FOLDER)
    project.groups.find{ |group| group.path == "Pods" }&.remove_from_project()
    project.save()

    # File system
    system('rm -rf Pods')
    #system('rm Podfile')
end


### MAIN ###
puts "********** Cocoapods CLEAN UP **********"
cocoapod_clean_actions()

puts "********** Cocoapods EXTRA CLEAN UP **********"
project = Xcodeproj::Project.open "./WhiteLabel.xcodeproj"

clean_build_settings(project)
clean_build_phases(project)
remove_files_and_folders(project)

project.save()

并且可以称为

ruby PodExtraClean.rb
于 2021-03-01T11:13:20.840 回答