Как удалить CocoaPods из проекта?

Как правильно удалить CocoaPods из проекта? Я хочу удалить весь CocoaPod. Из-за некоторых ограничений, наложенных моим клиентом, я не могу его использовать. Мне нужно иметь только один xcodeproj вместо xcworkspace.

24 ответа

Решение

Удаление CocoaPods из проекта возможно, но в настоящее время не автоматизировано CLI. Во-первых, если единственная проблема, с которой вы столкнулись, это невозможность использования xcworkspace Вы можете использовать CocoaPods только с xcodeproj с помощью --no-integrate флаг, который будет производить Pods.xcodeproj но не рабочее пространство. Тогда вы можете добавить это xcodeproj в качестве подпроекта для вашего основного xcodeproj,

Если вы действительно хотите удалить все интеграции CocoaPods, вам нужно сделать несколько вещей:

ПРИМЕЧАНИЕ редактирование некоторых из этих вещей, если сделано неправильно, может сломать ваш основной проект. Я настоятельно рекомендую вам проверить ваши проекты в системе контроля версий на всякий случай. Также эти инструкции для версии CocoaPods 0.39.0, они могут измениться с новыми версиями.

  1. Удалить автономные файлы (PodfilePodfile.lock и ваш Pods каталог)
  2. Удалить сгенерированный xcworkspace
  3. Открыть свой xcodeproj файл, удалите ссылки на Pods.xcconfig а также libPods.aFrameworks группа)
  4. Под вашим Build Phases удалить Copy Pods Resources, Embed Pods Frameworks а также Check Pods Manifest.lock фазы.
  5. Это может показаться очевидным, но вам нужно каким-то образом интегрировать сторонние библиотеки или удалять ссылки на них из своего кода.

После этих шагов вы должны быть установлены с одним xcodeproj что существовало до того, как вы интегрировали CocoaPods. Если я что-то пропустил, дайте мне знать, и я отредактирую это.

Кроме того, мы всегда ищем предложения по улучшению CocoaPods, поэтому, если у вас есть проблемы, отправьте их в наш трекер, чтобы мы могли найти способ их исправить!

РЕДАКТИРОВАТЬ

Как показал Джек Ву в комментариях, есть сторонний плагин CocoaPods, который может автоматизировать эти шаги для вас. Это можно найти здесь. Обратите внимание, что это сторонний плагин и не всегда может быть обновлен, когда CocoaPods. Также обратите внимание, что это сделано основным членом команды CocoaPods, чтобы проблема не была проблемой.

pod deintegrate а также pod clean две назначенные команды для удаления CocoaPod из вашего проекта / репо.

Вот полный набор команд:

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

Оригинальное решение было найдено здесь: https://medium.com/@icanhazedit/remove-uninstall-deintegrate-cocoapods-from-your-xcode-ios-project-c4621cee5e42

Документация CocoaPod по pod deintegrate: https://guides.cocoapods.org/terminal/commands.html

Чтобы полностью удалить стручки из проекта, вам нужно сначала установить две вещи... они следующие (Предположим, у вас уже установлены какао-стручки в вашей системе.)...

  1. Cocoapods-Deintegrate Плагин
  2. Cocoapods-Clean Плагин

Монтаж

  1. Cocoapods-Deintegrate Плагин

    Используйте эту следующую команду на вашем терминале, чтобы установить его.

    sudo gem install cocoapods-deintegrate
    
  2. Cocoapods-Clean Плагин

    Используйте эту следующую команду на вашем терминале, чтобы установить его.

    sudo gem install cocoapods-clean
    

использование

Прежде всего, перейдите в папку вашего проекта, используя обычную команду, например..

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

Теперь используйте эти два плагина, чтобы полностью удалить его следующим образом.

  1. Cocoapods-Deintegrate Плагин

    Используйте эту следующую команду на вашем терминале, чтобы сначала деинтегрировать модули из вашего проекта.

     pod deintegrate
    

Дезинтегрирующие стручки

  1. Cocoapods-Clean Плагин

    После деинтеграции pod из вашего проекта используйте следующую команду на вашем терминале, чтобы полностью очистить его.

     pod clean
    

    После выполнения вышеуказанных задач в каталоге вашего проекта должен оставаться подфайл. Просто удалите его вручную или используйте следующую команду на терминале.

     rm Podfile
    

Вот и все... Теперь ваш проект свободен от стручков... Очищен.

Удаление Cocoapods из системы.

В любом случае попробуйте использовать следующую команду на своем терминале, чтобы удалить / удалить кока-стручки из вашей системы.

sudo gem uninstall cocoapods

Это удалит кока-стручки автоматически.

Благодарю. Надеюсь, это помогло.

pod deintegrate

После этого cmd в вашем проекте не осталось следов Cocoapods.

Но ваше рабочее пространство, ссылающееся на проект Pods, все еще остается, вам нужно удалить ниже 3 файла вручную:

xx.xcworkspace
Podifle
Podfile.lock

Затем вы можете снова использовать свой проект.

Повеселись!

Тестовая версия CocoaPod = 1.2.0

Я думаю, что есть более простой способ сделать это.

Как отредактировано принятым ответом, теперь вы можете использовать сторонний плагин https://github.com/kylef/cocoapods-deintegrate, он надежен, потому что его сделал член основной команды CocoaPods.

Но есть еще несколько файлов:

Podfile
Podfile.lock
Workspace

Вы можете удалить их из своего проекта вручную, но есть еще один инструмент, который поможет вам очистить их, благодаря cocoapods-clean.

Наконец, работа по удалению еще не завершена, cocoapods-clean не чистить Podfile, просто беги:

rm Podfile

Ура!

Перед удалением вы должны убедиться, что у вас есть резервная копия вашего проекта!

С компакт-диска терминала перейти в папку проекта. Следующие ниже шаги помогают отключить модуль от проекта.

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

Затем просто откройте файл проекта и удалите папку Pod, если она все еще отображается в Project Explorer с красным цветом. Собери проект

Я попробовал все эти ответы, но это все равно не получилось, в конце концов я попытался:

pod deintegrate
pod install

который на самом деле работал!

Как будто нужно удалить все сценарии pod из ваших фаз сборки и заново добавить их обратно, чтобы это работало, по крайней мере, в моем случае.

Ответ Кейта великолепен - я просто хочу отметить, что поскольку Cocoapods 0.36 начинает поддерживать Dynamic Frameworks, если вы используете 'use_frameworks!' в вашем "Podfile", и вы хотите удалить Cocoapods, вы должны сделать это:

  • Под Build Phases удалять Embed Pods Frameworks фаза.

Разработчик может столкнуться с двумя аспектами.

  • Либо он хочет полностью удалить стручки из проекта
  • Разработчик хочет удалить конкретный фреймворк из проекта из модулей.

В первом случае вы должны использовать "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

Здесь я хочу удалить фейсбук и разобрать фреймворки (которые были установлены с помощью pods), а не iCarousel, поэтому я обновил свой файл pod, как указано выше.

Теперь, если я запустил pod install, он сохранит iCarousel, как в моем проекте, и удалит Facebook и проанализирует.

  1. Первое, что вам нужно сделать, это удалить Podfile, Podfile.lock, Pods папка и сгенерированное рабочее пространство.
  2. Далее в .xcodeprojудалите ссылки на Pods.xcconfig файлы и libPods.a файл.
  3. На вкладке проекта Build Phases удалите раздел Check Pods Manifest.lock (открытый), раздел "Copy Pods Resources" (внизу) и "Embed Pod Resources" (внизу).
  4. Удалить Pods.framework,

Единственное, что вы можете сделать, это включить некоторые библиотеки, которые вы использовали ранее. Вы можете сделать это, просто перетащив любые папки из папок pods в ваш проект (я предпочитаю помещать их в мою папку "Вспомогательные файлы").

Это сработало для меня.

Как удалить модуль из вашего проекта Xcode

Откройте каталог вашего проекта, затем запустите скрипты

      $ pod deintegrate
$ pod clean
$ rm Podfile

Затем вам нужно вручную удалить файл расширения .xcworkspace.

      "ProjectName.xcworkspace"

или удалить скриптом

      $ rm projectname.xcworkspace
$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod clean
$ rm Podfile

Все предоставленные ответы действительны и правильны. Однако, когда вы запускаете установку модуля и изменяете любое из полей, содержащих любую конфигурацию Cocopods , очистка и деинтеграция перестают работать должным образом.

В моем случае у меня, помимо прочего, были перезаписаны FRAMEWORK_SEARCH_PATHS в настройках сборки , и это становится утомительным при работе с 40 целями...

Следующий файл ruby ​​предназначен для запуска команд Cocopods для «полной» очистки проекта, а также выполняет некоторую дополнительную очистку, такую ​​как настройки сборки, и среди прочего удаляет папку «Pod» из проекта. Сценарий также может содержать действия, выполняемые «очисткой» или «деинтеграцией».

      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

Если не работает, попробуйте
1. очистить проект.
2. удалил производные данные.

если вы не знаете, как удалить производные данные, перейдите сюда

Как "Удалить производные данные" в Xcode6?

Удалить все связанные файлы pod.

xx.xcworkspace Podifle Podfile.lock

и Goto Targets ->Build phase-> Здесь удалите контрольные pods [cp] manifest.lock

Следующая команда работает для меня, чтобы удалить определенный элемент, и установка возвращается.

      `$ pod deintegrate
$ pod cache clean --all
$ pod install`

Если вы просто хотите удалить один модуль и сохранить другие, которые вы, возможно, установили, откройте файл pod в каталоге вашего приложения и удалите тот, который вы хотите удалить. Затем перейдите в каталог приложения с помощью терминала и введите:

pod update

Это удалит модуль, который вы удалили из файла. Вы увидите, что он был удален в терминале:

Analyzing dependencies
Removing FirebaseUI
Removing UICircularProgressRing

Обратите внимание, что этот метод также извлекает любые обновления для других модулей в вашем подфайле. Вы можете или не можете этого хотеть.

Я не думаю, что вам больше нужно деинтегрировать. Я смог сделать это с помощью следующей команды в терминале:

установка стручка

и он автоматически удалил те, которых больше нет в подфайле

  1. Удалить podfile имя от .plist
  2. Переустановите модуль еще раз (используйте эту ссылку для установки модуля)

Я напишу, что я сделал очень кратко (чтобы удалить любые CocoaPods из моего проекта)..

  1. удалить любую добавленную папку (рамки, блоки,...)
  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. Выберите Build Phases из верхних вариантов
  5. оставьте группы по умолчанию (целевые зависимости, исходники компиляции, связанный двоичный файл с библиотеками, ресурсы пакета копирования) и удалите любые другие

графическое изображение детализировано

Мне удалось удалить мои модули в проекте с помощью приложения CocoaPods (версия 1.5.2). После этого я только удалил в папке файлы podfile, podfile.lock и xcworkspace.

Используйте эти команды терминала (не забудьте использовать 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: создайте GUI и забудьте об этом безумии командной строки. Мы не в 1974 году больше.

Другие вопросы по тегам