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

Я пытаюсь перейти к новой системе сборки при компиляции с 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/раскадровки. Как я могу решить эту ошибку, не возвращаясь к устаревшей системе сборки?

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

Я исправил свою проблему, переместив фазу сборки "Copy Bundle Resources" до того, как все мои "копии файлов" и "Связывание двоичных файлов с фазами сборки библиотек"

Ответ 6

У меня была эта проблема с 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 и по-прежнему актуальны.

Ответ 7

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

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

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

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

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

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

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

Ответ 8

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

Ответ 9

У меня была похожая проблема со смешанным взаимодействием между 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 определения класса myObjCClass.m.

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

@implementation myObjCClass

@end

И это не беспокоило.

Ответ 10

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

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

в Build Settings → Apple Clang - Language - Modules

После включения (установленного в YES), он избавился от ошибки.

Ответ 11

Я столкнулся с подобной проблемой, когда пытался архивировать мой проект на 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

Ответ 12

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

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

Ответ 13

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

Ответ 14

Core_Data

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

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

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

Ответ 15

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

Ответ 16

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

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

Workspace Settings

Ответ 17

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

Ответ 18

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

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

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

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

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

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

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

Ответ 19

Фактически, вам нужно только обратить внимание на приглашение XCode. This usually can be resolved by moving the target 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 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.

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

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

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

Xcode 10.2 и Swift 5

Ответ 20

Я решил это, переместив "Run Script" в начало фаз сборки.

Ответ 21

Следующие два варианта помогли мне: File-> Настройки проекта/Рабочего пространства.

1, Измените систему сборки на "Legacy Build system" в File-> Настройки проекта

2. Отредактируйте схему и выберите "Параллелизировать сборку" в разделе "Сборка".