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

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

Детали цикла: → Целевой "проект": LinkStoryboards

Целевой "проект" имеет команду компиляции с вводом "/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard"

Целевой 'проект': ValidateEmbeddedBinary /Users/project/Xcode/DerivedData/project-hgqvaddkhmzxfkaycbicisabeakv/Build/Products/Debug-iphoneos/project.app/PlugIns/stickers.appex

Целевой "проект" имеет команду процесса с вводом "/Users/project/Resources/Info.plist"

Целевой "проект" имеет команду компиляции с вводом "/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard"

Даже после удаления файла я получаю то же самое для другой xib/storyboard. Как мы можем устранить ошибку (не переходя на устаревшую систему сборки)?

36 ответов

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

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

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

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

На самом деле, вам нужно только обратить внимание на подсказку 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,

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

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

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

Xcode 10.2 и Swift 5

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

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

Та же проблема в Xcode 15

Решение 1

Если на этапе сборки есть сценарий запуска , отложите его (перетащите вниз).

Где скрипт запуска? Проверьте здесь для справки

Решение 2

Xcode 15 не поддерживает iOS 11.0 и ниже. Ограничение поддерживаемой целевой версии развертывания для этой платформы — 12.0.

Добавьте следующий блок в конец подфайла

      post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'No'
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
      __apply_Xcode_12_5_M1_post_install_workaround(installer)
    end
  end
end

Решение 3 (у меня сработало)

Проверяйте копию только при установке на этапе сборки в Embed Foundation Extensions.

посмотри и здесь

У меня была эта проблема с 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 обнаруживает циклы зависимостей в вашей сборке и предоставляет диагностику, чтобы помочь вам разрешить их. Исправление этих циклов зависимостей повышает надежность вашей сборки, так что правильные продукты производятся последовательно (циклы являются возможной причиной необходимости удаления ваших производных данных). Это также сокращает время инкрементной сборки, поскольку циклы сборки приводят к тому, что что-то в графике сборки всегда устаревает в каждой сборке, что приводит к ненужной повторной работе сборки при каждой сборке.

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

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

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

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

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

Это проблема поXcode15бета 8, для тех, кто используетFirebase Crashlytics. Исправление состоит в том, чтобы переместить фазу запуска сценария Crashlytics (или, возможно, какую-либо другую фазу сценария для вас) в нижнюю часть окна.Build Phasesвкладка.

Изменить: проблема сохраняется в Xcode15 RC.

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

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

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

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

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

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

3) Перетащите фазу заголовков и переместите ее выше фазы сборки Complile Sources.

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

В мишени Schemeнайти этикетку Build, закрой Find Implicit Dependencies, Эти шаги могут работать.

У меня такая же проблема с Cocoapods.

Во-первых, удалите стручки:

      rm -rf ios/Pods

затем снова установите pods:

      cd ios && pod install && cd ..

Затем запустите приложение, теперь оно должно работать.

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

Лучшее временное исправление, которое я нашел (до тех пор, пока вы не решите основную проблему), - это внести простое изменение в исходный код (даже такое тривиальное, как добавление новой строки), а затем повторить попытку. Я считаю, что даже изменения пробела достаточно, чтобы он смог построить снова. Однако это определенно временно, так как, вероятно, повторится снова после нескольких попыток.

Это лучше, чем очистка папки сборки (которая, как я обнаружил, также временная), поскольку гораздо быстрее изменить и перестроить пробелы, чем очистить папку сборки и перестроить (особенно в более крупных проектах).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

в Build Settings -> Apple Clang - Language - Modules

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

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

Core_Data

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

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

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

Xcode: 11.3.1 Цель: XCUITest target

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

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

1. Выберите «Цель», а затем выберите «Фаза сборки», чтобы переместить сценарий «Выполнить» в начало списка «Компилировать исходные коды».

2 - отредактировать файл pod, найти

installer.pods_project.targets.each

и создайте свой код, как показано ниже

      post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
    config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
    '$(inherited)',
    'PERMISSION_CAMERA=1',
    'PERMISSION_MICROPHONE=1',
  ]
end
  end
end

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

если ты в трепетном беге

порхать чисто

если в React-Native

cd ios && rm -rf Pods && pod install && cd ..

внимание

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

  1. Бегатьflutter cleanв терминале или из меню Android Studio
  2. Очистите папку сборки в XCode (Продукт -> Очистить папку сборки).
  3. Закомментируйте каждый бит собственного кода, который вы добавили в основной класс приложения, который ссылается на другие файлы.
  4. Закомментируйте все, кроме#import "GeneratedPluginRegistrant.h"в вашем заголовочном файле моста ([project name]-Bridging-Header.hпо умолчанию, я думаю)
  5. Нацельтесь на симулятор и запустите приложение из XCode.
  6. Раскомментируйте все, что вы закомментировали на шагах 3 и 4.

Меня это исправило.

В моем случае,

Удалены все модули и переустановка устранила ошибку

      Remove Pods directory in ios folder
pod install

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

Тоже была эта проблема какое-то время. В конец подфайла добавлен следующий блок (это также избавит от некоторых предупреждений):

      post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.deployment_target = ios_version
    target.build_configurations.each do |config|
      config.build_settings['IOS_DEPLOYMENT_TARGET'] = 'iOS ' + ios_version
    end
  end
end

я тоже переехал use_frameworks!к корню Podfile.

если вы разрабатываете на React-Native, для меня это был лучший способ.

cd ios && rm -rf Pods && pod install && cd ..

Только для Экспо

  1. expo prebuild --clean
  2. cd ios
  3. pod install
  4. yarn ios
Другие вопросы по тегам