Цикл внутри; здание может дать ненадежные результаты: ошибка Xcode 10

80

Я пытаюсь перейти на новую систему сборки при компиляции с Xcode 10. Однако возникает следующая ошибка:

Cycle details:
→ Target 'project' : LinkStoryboards

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

Target 'project' : ValidateEmbeddedBinary /Users/project/Xcode/DerivedData/project-hgqvaddkhmzxfkaycbicisabeakv/Build/Products/Debug-iphoneos/project.app/PlugIns/stickers.appex

Target 'project' has process command with input '/Users/project/Resources/Info.plist'

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

Скриншот добавлен

Даже после удаления проблемного файла я получаю то же самое для другого xib / раскадровки. Как я могу решить эту ошибку, не возвращаясь к устаревшей системе сборки?

Сахил Капур
источник
У меня была аналогичная ошибка, и я исправил ее, удалив «производные данные» и очистив проект. Это сработало для меня как прелесть!
Джайпракаш Дубей

Ответы:

62

Если у кого-то возникла проблема с системой сборки Xcode 10, выполните следующие действия, чтобы исправить это:

  1. В Xcode перейдите в File-> Project / Workspace settings.
  2. Измените систему сборки на Legacy Build system.

Это решит проблему сборки с новым Xcode.

Если вы хотите работать с новой системой сборки, вы можете найти справку по устранению неполадок на этой странице справки Apple Xcode .

Акшай Сандервани
источник
50
Весь смысл вопроса в том, чтобы перейти на последнюю систему сборки.
Sahil Kapoor
4
Затем вы должны упомянуть о том, что вам не нужно решение с изменением системы сборки. Кроме того, я уже упоминал, что если вы хотите работать с новой системой сборки, вы можете выполнить шаги, указанные в центре поддержки Xcode. Также укажите вескую причину, когда вы голосуете против. Благодаря! @SahilKapoor
Акшай Сандервани
1
Спасибо добрый незнакомец. Меня интересует только то, чтобы моя сборка снова заработала, чтобы уложиться в срок, поэтому ваш ответ - именно то, что мне нужно.
Дэн Лоуни,
6
Это не подходящее решение проблемы. Систему сборки не следует менять на Legacy для чего-то столь простого.
Варун
38

У меня была эта проблема с Cocoapods. Решением было очистить папку сборки, переустановить все модули, а затем перестроить приложение. Так проблема решилась сама собой.

JAL
источник
2
Это сработало и для меня. Я сделал чистую установку и установку модуля.
Cloud9999Strife
В моем случае я только что выполнил установку модуля, поэтому мне нужно было очистить только папку сборки. Эта ошибка возникла только после того, как я разрешил Xcode обновлять настройки сборки.
Stonetip
была проблема с Alamofire. Сделал «Чистую папку сборки» без переустановки стручков какао и работал нормально
kite_n_code
25

Я исправил свою проблему, переместив этап сборки «Копировать ресурсы пакета» до всех этапов сборки «Копировать файлы» и «Связать двоичный файл с библиотеками».

gypsyDev
источник
+1, но я использовал небольшую вариацию. Мне не нужно было ничего продвигать перед «Связью двоичного файла с библиотеками», чего я бы не стал делать, потому что новый проект по умолчанию в Xcode не такой. Я просто переместил «Копировать ресурсы пакета» перед «Копировать вспомогательные инструменты» (которые копируют некоторые инструменты командной строки и вспомогательное приложение в Contents / Helpers продукта приложения macOS). Но поскольку порядок этих двух файлов должен иметь значение - они только копируют файлы - это не имеет смысла. Итак, я зарегистрировал ошибку: 42927301. Мое модифицированное решение: поменяйте местами различные этапы сборки Copy XXX, пока оно не
заработает
2
То же самое для меня, я переместил свои ресурсы пакета копирования выше фазы копирования файлов, и теперь он работает. Я обману твою ошибку @JerryKrinock
Питер Н. Льюис
Для меня проблема заключалась в зависимостях Embed Frameworks, поэтому я переместил Embed Frameworks выше Copy Bundle Resources, и это помогло.
Елена
19

Новая система сборки Xcode 10 обнаруживает циклы зависимостей в вашей сборке и предоставляет диагностику, которая поможет вам их разрешить. Исправление этих циклов зависимости повышает надежность вашей сборки, так что правильные продукты производятся единообразно (циклы являются возможной причиной необходимости удаления производных данных). Это также сокращает время инкрементной сборки, поскольку циклы в сборке приводят к тому, что что-то в вашем графике сборки всегда устаревает при каждой сборке, что заставляет повторную сборку работать без необходимости каждый раз при сборке.

В справке Xcode есть документация по разрешению некоторых распространенных типов циклов зависимости: https://help.apple.com/xcode/mac/current/#/dev621201fb0

Тем не менее, эта циклическая диагностика выглядит немного странно. Похоже, вы смогли решить эту проблему, изменив порядок этапов сборки, но я не думаю, что диагностика действительно объясняла проблему. Если вы не возражаете, мы будем очень признательны за отчет об ошибке об улучшении этой диагностики для этого конкретного случая. Вы можете подать заявку на https://bugreport.apple.com . Пожалуйста, включите все детали вашего проекта, которые, по вашему мнению, могут иметь отношение к делу; Образец проекта, который воспроизводит проблему, является идеальным, но если вы не можете его прикрепить, диагностика и некоторое представление о структуре проекта по-прежнему будут полезны.

Рик Баллард
источник
18

У меня возникла проблема с Cocoapods, и я нашел временное решение:

  1. Установите последнюю версию cocoapods (1.5.3): sudo gem update cocoapods
  2. Удалите производные данные: rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. pod install

Источник здесь, и я нахожусь на Xcode 10 beta 4.

РЕДАКТИРОВАТЬ : теперь на Xcode 10.0 и по-прежнему актуально.

габучан
источник
это случилось со мной снова на прошлой неделе на Xcode 10.1 (10B61), и он все еще работал. Обязательно выполните Clean Build Folder(и выход из Xcode также может помочь) перед выполнением шагов 2.и 3..
gabuchan
Работал как шарм!
флагманская
15

У меня была аналогичная проблема со смешанным взаимодействием между Swift, Objective-C и CoreData : в моем проекте (написанном на Swift) я также использовал классы Swift Core Data.

Но в какой-то момент мне понадобился класс Objective C с общедоступными свойствами (определенными в его аналоге заголовка), ссылающимся на основные сущности данных.

#import "ProjectName-Swift.h" // this is to import the swift entities into ObjC

@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

Как только я изменил модель CoreData, XCode попытался перестроить классы, и я завис с указанной ошибкой построения цикла.

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

В этом myObjCClass.hя удалил общий оператор импорта заголовка Swift и изменил его с помощью @classдирективы:

@class MyCoreDataClass; // tell the compiler I will import the class definition somewhere else

// the rest stays the same
@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

и я переместил #import "ProjectName-Swift.h"оператор в myObjCClass.mфайл определения класса.

#import "myObjCClass.h"
#import "ProjectName-Swift.h"

@implementation myObjCClass

@end

И это не создавало проблем.

Lookaji
источник
Вау, большое спасибо. Всю ночь боролся с этим, но когда я полностью реализовал это предложение, проблема была исправлена!
Эрик ван дер Нейт
14

Я наконец смог решить эту проблему, переместив Embed App Extensionsскрипт Build Phasesиз основной цели в последнюю позицию.

Сахил Капур
источник
Получил эту ошибку в Xcode 10.0 beta 4 (10L213o) - этот обходной путь решил ее :-)
StackUnderflow
11

Фактически, вам нужно только обратить внимание на подсказку Xcode This usually can be resolved by moving the target's Headers build phase before Compile Sources , и тогда вы сможете это сделать.

Когда я столкнулся с этой проблемой, Xcode предлагает мне:

:-1: Cycle inside XXXX; building could produce unreliable results. This usually can be resolved by moving the target's Headers build phase before Compile Sources.
Cycle details:
→ Target 'XXXX': LinkStoryboards
○ Target 'XXXX: Ditto Path/XXXX-Swift.h /Path/XXXX-Swift.h
○ Target 'XXXX has compile command for Swift source files
○ That command depends on command in Target 'XXXX: script phase “Run Script”

Я сделал только одно и отлично решил проблему:

Выберите, Targetа затем выберите, Build Phaseчтобы переместить в Run Scriptначало Compile Sources.

Запускаем, успешно скомпилированы.

Принцип прост, достаточно изменить порядок компиляции.

изображение 1

Xcode 10.2 и Swift 5

ШеваКуйлин
источник
2
это работает, но только один раз, а затем в следующей команде сборки проблема возвращается.
Swati
6

Я столкнулся с той же проблемой: ниже была ошибка

Цикл в зависимостях между целями «Pods-MyAppName» и «RxCocoa»; строительство может дать ненадежные результаты. Обычно это можно решить, переместив целевую фазу сборки заголовков перед компиляцией источников. Цикл: Pods-MyAppName → RxCocoa → Pods-MyAppName

Я решил это, используя следующие шаги:

1). Перейти к целевой RxCocoa в проекте Pods-MyAppName

2) Перейти к этапам сборки

3) Перетащите фазу заголовков и переместите ее над фазой сборки совместимых источников.

Это устранило мою проблему. Надеюсь, поможет!

Nishu_Priya
источник
6

SchemeНайдите метку в мишени Buildи убедитесь, что Find Implicit Dependenciesона не отмечена. Эти шаги могут сработать.

Nh Xu
источник
Когда вы говорите «закрыть», вы имеете в виду, что у него должен быть цвет и галочка? Или что он должен быть пустым, без галочки?
Ben Leggiero,
1
Привет, @BenLeggiero. «Закрыть» означает, что он должен быть пустым, без галочки.
Nh Xu
3

Мое решение было просто очистить папку сборки, а затем перестроить.

одно животное
источник
Удивительно, как никто не оценил это решение. Просто, но это должно быть первое, что мы должны попробовать, прежде чем углубляться в проблему.
Hoon
3

Моя проблема была связана с циклической зависимостью между моим быстрым заголовком моста и моими целевыми файлами c.

В моих заголовочных файлах объекта c у меня был #import "...-swift.h" файл, а затем в пару моих быстрых файлов я включил эти файлы с указанным импортом и, таким образом, вызвал циклическую зависимость.

Это StackOverflow, который заставил меня найти решение:

Objective C, проблема с совместимостью Swift из-за циклической зависимости

Как предотвратить циклическую ссылку, когда заголовок моста Swift импортирует файл, который импортирует сам Hopscotch-Swift.h

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

Я преобразовал вышеуказанные файлы в быстрые, и это решило мою проблему.

Константин
источник
2

Похоже, вам нужно изменить порядок этапов сборки в ваших целевых модулях. Для меня сработало перемещение заголовков над остальными. Вы можете автоматизировать это в своем подфиле:

require 'xcodeproj'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    headers_phase = target.build_phases.find { |p| p.kind_of?(Xcodeproj::Project::Object::PBXHeadersBuildPhase) }
    if headers_phase
      puts "#{target.name}: Moving Headers build phase to top"
      target.build_phases.insert(0, target.build_phases.delete_at(target.build_phases.index(headers_phase)))
    end
  end
end
ячмень
источник
1

Та же проблема, Version 10.0 beta 3 (10L201y)и я хотел иметь новую систему сборки .

Проблема отключена Enable Modules (C and Objective-C)

в Build Settings -> Apple Clang - Language - Modules

После включения (выставил ДА) избавился от ошибки.

Vauxhall
источник
1

Я столкнулся с подобной проблемой, когда пытался заархивировать мой проект на Xcode 10. Вот подробный текст:

→ Target 'mytarget': CodeSign /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

○ Target 'mytarget': SetMode u+w,go-w,a+rX /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

Исправлено, установив $(USER)вmytarget -> Build Settings -> Deployment -> Install Owner

как кошка
источник
1

Core_Data

У меня была та же проблема и ошибка, но моя случилась, когда я «создал подкласс NSManagedObject» для своей сущности и столкнулся с этой ошибкой. Итак, если вы думаете, что ваша ошибка в отношении Core Data такая же, как у меня, что, вероятно, может вам помочь (и помогло мне):

  • щелкните свой объект в файле "xcdatamodel"
  • перейдите на правую панель и нажмите Data Model Inspector
  • измените "Модуль" на "Текущий модуль продукта"
  • и, наконец, измените "Codegen" на "Manual / None"
  • чистить и строить

Я думаю, потому что в других сценариях Xcode создает файл автоматически, и когда мы создаем другой, это вызывает конфликт.

Алиреза А.Я.
источник
1

Xcode 10.2.1 / Цель модульного тестирования. Моя цель модульного тестирования не зависит от цели хоста, чтобы сократить время сборки. Решить ее снимите флажок Find Implicit Dependenciesв Scheme- Buildварианты, Как я указать все зависимости в Build Settings- Compile Sources.

Джимми
источник
0

Вы можете исправить это здесь:

Файл -> Настройки рабочего пространства -> Система сборки: новая система сборки

Настройки рабочего пространства

SepCode
источник
0

Я пробовал что-то с этой страницы, но единственное, что мне помогло, это то, что я сделал копию цели и обновил имя копии (удалил суффикс копии), удалил старую и после этого установил pod.

Владимир Славик
источник
0

Я столкнулся с этой проблемой после обновления Xcode до версии 11.4. Это исправило переход на 11.2.1.

Deepseey
источник
0

Xcode: 11.3.1 Цель: XCUITest target

  1. Выполните команду для очистки папки сборки: rm -rf ~ / Library / Developer / Xcode / DerivedData / *

  2. Измените настройки рабочего пространства: выберите Legacy Build System.

введите описание изображения здесь

Кшама Сингх
источник
-1

У меня сработали следующие два варианта: File-> Project / Workspace settings.

1. Измените систему сборки на «Legacy Build system» в File-> Project Settings.

2, отредактируйте схему и выберите опцию «Распараллелить сборку» в разделе «Сборка».

GSR
источник
Это не связано. Современная система сборки этого не вызовет.
Raptor
-1

На панели проекта в LHS для продуктов сборки не выбирайте их в списке для Целевого членства на панели RHS.

user10658782
источник