从项目中删除 CocoaPods 的正确方法是什么?我想删除整个 CocoaPod。由于我的客户施加的一些限制,我无法使用它。我只需要一个 xcodeproj 而不是 xcworkspace。
从项目中删除 CocoaPods 是可能的,但目前 CLI 无法自动执行。首先,如果您遇到的唯一问题是无法使用 xcworkspace
,您可以通过使用 --no-integrate
标志来使用仅带有 xcodeproj
的 CocoaPods,这将产生 Pods.xcodeproj
而不是工作区。然后您可以将此 xcodeproj
作为子项目添加到您的主 xcodeproj
。
如果你真的想删除所有 CocoaPods 集成,你需要做一些事情:
注意如果操作不当,编辑其中一些内容可能会破坏您的主项目。我强烈建议您将项目检查到源代码管理中以防万一。这些说明也适用于 CocoaPods 版本 0.39.0
,它们可能会随着新版本而改变。
删除独立文件(Podfile Podfile.lock 和您的 Pods 目录)删除生成的 xcworkspace 打开您的 xcodeproj 文件,删除对 Pods.xcconfig 和 libPods.a 的引用(在 Frameworks 组中)在您的 Build Phases 下删除 Copy Pods Resources,嵌入 Pods 框架并检查 Pods Manifest.lock 阶段。这似乎很明显,但您需要以其他方式集成第 3 方库或从代码中删除对它们的引用。
在这些步骤之后,您应该使用在集成 CocoaPods 之前存在的单个 xcodeproj
进行设置。如果我错过了任何内容,请告诉我,我将对其进行编辑。
此外,我们一直在寻找有关如何改进 CocoaPods 的建议,因此如果您有任何问题,请在我们的 issue tracker 中提交,以便我们想出解决问题的方法!
编辑
正如 Jack Wu 在评论中的shown,有一个第三方 CocoaPods 插件可以为您自动执行这些步骤。可以找到here。请注意,它是第三方插件,当 CocoaPods 存在时,可能并不总是更新。另请注意,它是由 CocoaPods 核心团队成员制作的,因此问题不会成为问题。
pod deintegrate
和 pod clean
是从项目/存储库中删除 CocoaPod 的两个指定命令。
这是完整的命令集:
$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod cache clean --all
$ rm Podfile
pod deintegrate
上的 CocoaPod 文档:https://guides.cocoapods.org/terminal/commands.html#pod_deintegrate
rm Podfile.lock
要从项目中完全删除 pod,您需要先安装两件事...如下(假设您的系统中已经安装了 cocoa-pods。)...
Cocoapods-Deintegrate 插件 Cocoapods-清洁插件
安装
Cocoapods-Deintegrate 插件 在您的终端上使用以下命令来安装它。 sudo gem install cocoapods-deintegrate Cocoapods-Clean Plugin 在您的终端上使用以下命令进行安装。 sudo gem install cocoapods-clean
用法
首先使用像往常一样的命令转到您的项目文件夹,例如..
cd (path of the project) //Remove the braces after cd
现在使用这两个插件将其完全删除,如下所示..
Cocoapods-Deintegrate 插件 在您的终端上使用以下命令首先从您的项目中取消集成 pod。吊舱解体
https://i.stack.imgur.com/TGgrf.png
Cocoapods-Clean Plugin 从项目中解构 pod 后,在终端上使用以下命令彻底清理它。 pod clean 完成上述任务后,Podfile 应该仍然保留在您的项目目录中..只需手动删除它或在终端上使用以下命令.. rm Podfile
就是这样......现在你的项目没有豆荚......清理了。
从系统中移除 Cocoapods。
任何方式尝试在您的终端上使用以下命令从您的系统中卸载/删除 coca-pods。
sudo gem uninstall cocoapods
它会自动移除古柯豆荚。
谢谢。希望这有帮助。
pod clean
删除您的工作区,即使您在其中有其他项目!当心!
我认为有一种更简单的方法可以做到这一点。
正如接受的答案所编辑,现在您可以使用第三方插件 cocoapods-deintegrate,它是可靠的,因为它是由 CocoaPods 核心团队成员制作的。
但是,仍然存在一些文件:
Podfile
Podfile.lock
Workspace
您可以手动将它们从项目中删除,但还有另一个工具可以帮助您清理它们,谢谢cocoapods-clean。
最后,卸载工作还没有完成,cocoapods-clean
不要清理Podfile
,直接运行:
rm Podfile
干杯!
在删除之前,您应该确保您有项目的备份!
pod deintegrate
在这个 cmd 之后,您的项目中没有留下任何 Cocoapods 的痕迹。
但是您引用 Pods 项目的工作空间仍然存在,您需要手动删除以下 3 个文件:
xx.xcworkspace Podifle Podfile.lock
然后您可以再次使用您的项目。
玩得开心!
测试 CocoaPod 版本 = 1.2.0
我尝试了所有这些答案,但仍然无法构建,最终我尝试了:
pod deintegrate
pod install
这实际上有效!
就像它需要从构建阶段中删除所有 pod 脚本并重新添加它们以使其正常工作,至少在我的情况下是这样。
从终端 cd 移动到项目文件夹。以下步骤有助于从项目中分离 pod
$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod clean
$ rm Podfile
然后只需打开项目文件并删除 Pod 文件夹,如果它仍然在项目资源管理器中,颜色为红色。构建项目......它准备好了!
Keith 的回答很好 - 我只想指出,因为 Cocoapods 0.36 开始支持 Dynamic Frameworks,如果您使用的是“use_frameworks!”在您的“Podfile”中并且您希望删除 Cocoapods,您必须这样做:
在 Build Phases 下删除 Embed Pods Frameworks 阶段。
Build Phases
中有任何其他处理 Pods
的文件,也将它们删除。
开发人员可能面临两个方面。
要么他想从项目中完全删除 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 和解析。
您需要做的第一件事是删除 Podfile、Podfile.lock、Pods 文件夹和生成的工作区。接下来,在 .xcodeproj 中,删除对 Pods.xcconfig 文件和 libPods.a 文件的引用。在 Build Phases 项目选项卡中,删除 Check Pods Manifest.lock 部分(打开)、Copy Pods Resources 部分(底部)和 Embed Pod Resources(底部)。删除 Pods.framework。
您可能想要做的唯一一件事就是包含您之前使用的一些库。您可以通过简单地将 pods 文件夹中的任何文件夹拖到您的项目中来做到这一点(我更喜欢将它们放入我的 Supporting Files 文件夹中)。
它对我有用。
$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod clean
$ rm Podfile
gem uninstall cocoapods-deintegrate cocoapods-clean
如果您只想删除一个 pod 并保留您可能已安装的其他 pod,请在您的应用程序目录中打开 podfile 并删除您要删除的那个。然后使用终端导航到您的应用程序目录并键入:
pod update
这将删除您从 podfile 中删除的 pod。您将看到它已在终端中删除:
Analyzing dependencies
Removing FirebaseUI
Removing UICircularProgressRing
请注意,此方法还将拉取任何更新到您的 podfile 中的其他 pod。你可能想要也可能不想要。
pod install
添加/删除 pod。这是专门为了避免像您在此处所说的那样进行更新。您可以阅读他们关于这个主题的“指南”的更多信息... guides.cocoapods.org/using/pod-install-vs-update.html
删除所有相关的 pod 文件:
xx.xcworkspace
播客文件
Podfile.lock
在项目导航器中:
点击项目名称(蓝色图标)--> Targets (*) --> Build Phases --> 移除“[CP] Check Pods manifests.lock”(点击“x”)
(*) 单击项目名称,您可能必须先单击“显示项目和目标列表”才能看到侧栏。
我将简单地写下 iv 所做的事情(从我的项目中删除任何 CocoaPods)..
删除任何添加的文件夹(frameworks、Pods...) 删除所有添加的文件(PROJECT.xcworkspace、PodFile、PodFile.lock、Pods-PROJECT.debug.xcconfig、Pods-PROJECT.release.xcconfig、...) 离开您原来的(PROJECT、PROJECT_Tests、PROJECT.xcodeproj)从 xcode 上的项目中删除框架引用
要从 xcode 中删除框架引用:
使用 Project Navigator 选择 Project 选择 Target PROJECT 从顶部选项中选择 Build Phases 保留默认组(Target Dependencies、Compile Sources、Linked Binary with Libraries、Copy Bundle Resources)并删除任何其他
从 .plist 中删除 podfile 名称 再次重新安装 pod(使用此链接进行 pod 安装)
我认为你不再需要解体了。我可以在终端中使用以下命令来做到这一点:
吊舱安装
它会自动删除不再在 podfile 中的那些
使用这些终端的命令(不要忘记在新行的开头使用 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
我能够使用 CocoaPods 应用程序(版本 1.5.2)删除项目中的 pod。之后我只删除了文件夹中的 podfile、podfile.lock 和 xcworkspace 文件。
https://i.stack.imgur.com/hq3D8.png
详细的图示
提供的所有答案都是有效且正确的。但是,当您运行 pod install 并修改包含任何 cocoapods 配置的任何字段时,clean 和 deintegrate 将按预期停止工作。
就我而言,除其他外,我在构建设置上覆盖了 FRAMEWORK_SEARCH_PATHS,并且在处理 40 个目标时变得乏味......
https://i.stack.imgur.com/EAoAl.png
https://i.stack.imgur.com/pb7Zn.png
以下 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