Мы используем новую систему сборки и Cocoapods 1.7.5 для нашего проекта Xcode. Наш проект (назовем его Y) на самом деле является модулем разработки, но мы также написали несколько кодов для создания демо-приложения (вы знаете, чтобы ускорить сборку и итерации). Эти демонстрационные коды (AppDelegate.swift
, задачи запуска и т. д.) не включены в модуль разработки. Оставшиеся ~90 процентов исходных кодов и файлов ресурсов (таких как строки i18n и ресурсы изображений) упаковываются в модуль разработки для использования в другом проекте (назовем его X).
Во время разработки большинство изменений происходит в части модуля разработки Y, поэтому нам нужно убедиться, что каждый фрагмент изменений включен, когда X выполняет pod install
.
Недавно мы столкнулись с проблемой:
error: Multiple commands produce '/Users/x/Library/Developer/Xcode/DerivedData/Y-cawteybtitmeiafweribgqzkuhnr/Build/Products/Debug-iphoneos/Y.app/Assets.car':
1) Target 'Y' (project 'Y') has compile command with input '/Users/name/DEV/workspace/Y/SupportFiles/Assets.xcassets'
2) That command depends on command in Target 'Y' (project 'Y'): script phase “[CP] Copy Pods Resources”
После нескольких часов поиска multiple commands produce assets.car
в Google мы наконец увидели правдоподобное объяснение :
*.xcassets ресурсов копирования пакетов --› Assets.car
*.xcassets of [CP] Copy Pods Resource --› прочее Assets.car
Первый покрывает второй в новой системе сборки,Вот причина.
Когда мы вручную удаляем ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car
из выходных файлов [CP] Copy Pods Resource
, ошибка исчезает, и все работает нормально. Однако всякий раз, когда мы git checkout
переходим в другую ветку, или pod install
, или pod update
, существует довольно высокая вероятность того, что ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car
снова появится в выходных файлах [CP] Copy Pods Resource
. Нам нужно вручную удалять его снова и снова, что утомительно и неприятно.
Тогда мы начали спрашивать: кто стоит за всем этим? Кто отвечает за добавление ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car
в выходные файлы [CP] Copy Pods Resource
? Мы сфокусировали взгляд на Y.podspec
и нашли эти строки:
s.resource_bundles = {
'Y' => ['Resources/*'], # assets, lottie etc.
'YAuto' => ['auto_resources/*'] # i18n strings etc.
}
Мы подумали, что используем resource_bundles
неправильно, поэтому снова поискали в Google. Удивительно, но использование resource_bundles
вместо resources
рекомендуется в официальной документации. Кроме того, мы не смогли найти ненадлежащее использование с точки зрения resource_bundles
, что оставило нас без вариантов.
Кто-нибудь может помочь? Я подумал, может быть, мы могли бы исправить Y.xcworkspace
в скрипте post_install
в Podfile
, но я не знаю, как это сделать.