Цикл всередині; будівля може дати ненадійні результати: помилка 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 / раскадровки. Як я можу вирішити цю помилку, не повертаючись до застарілої системи збірки?


Я мав подібну помилку і виправив її, видаливши "похідні дані" та очистивши проект. Це спрацювало для мене як шарм!
Jayprakash Dubey,

Відповіді:


62

Для тих, хто має проблему із системою збірки Xcode 10, виконайте такі дії, щоб її виправити:

  1. У Xcode перейдіть у меню Файл-> Налаштування проекту / робочої області.
  2. Змініть систему складання на застарілу систему побудови.

Це вирішить проблему збірки за допомогою нового Xcode.

Якщо ви хочете працювати з новою системою збірки, ви можете знайти допомогу з усунення несправностей на цій довідковій сторінці Apple Xcode .


50
Вся суть питання в тому, щоб перейти до останньої системи збірки.
Сахіл Капур,

4
Тоді ви повинні згадати, що ви не хочете рішення зі зміною системи складання. Крім того, я згадував, що якщо ви хочете працювати з новою системою збірки, ви можете виконати дії, наведені в центрі підтримки Xcode. Крім того, вкажіть поважну причину, коли ви проти. Дякую! @SahilKapoor
Akshay Sunderwani

1
Дякую добрий незнайомець. Мій єдиний інтерес - змусити мою збірку знову працювати, щоб встановити певний термін, тому ваша відповідь - саме те, що мені потрібно.
Dan Loughney

6
Це не є належним рішенням проблеми. Систему збірки не слід міняти на Legacy для чогось такого простого.
Варун

38

У мене була ця проблема з Cocoapods. Рішенням було очистити папку збірки, перевстановити всі стручки, а потім відновити додаток. Питання вирішилось таким чином.


2
Це спрацювало і на мене. Я зробив чисте та встановлення стручка.
Cloud9999Strife

У моєму випадку я щойно здійснив установку pod, тому потрібно було лише очистити папку збірки. Ця помилка виникла лише після того, як я дозволив Xcode оновлювати налаштування збірки.
Stonetip

виникла проблема з Alamofire. Зробив «папку Clean Build», не перевстановивши стручки какао, і працював нормально
kite_n_code

25

Я вирішив свою проблему, перемістивши фазу збірки "Копіювати пакети ресурсів" перед усіма моїми фазами збірки "Копіювати файли" та "Пов'язати двійковий файл з бібліотеками"


+1, але я використав невелику варіацію. Мені не потрібно було нічого пересувати перед "Зв'язувати двійкові файли з бібліотеками", чого я б не робив, оскільки новий проект за замовчуванням у Xcode не такий. Я щойно перемістив "Копіювати пакети ресурсів" перед "Копіювати допоміжні інструменти" (який копіює деякі інструменти командного рядка та допоміжний додаток у Зміст / Помічники програми програми macOS). Але оскільки порядок цих двох повинен мати різницю - вони лише копіюють файли - це не має сенсу. Тож я подав помилку: 42927301. Моє модифіковане рішення: поміняйтеся місцями між різними фазами збірки XXX, поки це не спрацює :(
Джеррі Крінок,

2
Те ж саме для мене, я перемістив свої ресурси з набору копій над фазою копіювання файлів і попередньо це працює зараз. Я обманюю вашу помилку @JerryKrinock
Peter N Lewis

Для мене проблема полягала в залежностях 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.

EDIT : тепер на Xcode 10.0 і досі актуальний.


минулого тижня це сталося зі мною знову на Xcode 10.1 (10B61), і це все ще працювало. Не забудьте виконати Clean Build Folder(і вихід із Xcode також може допомогти), перш ніж виконувати кроки 2.та 3..
габучан

Працював як оберіг!
флагман

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

І це не викликало турбот.


Ого, дякую. Цілу ніч боровся з цим, але коли я ретельно реалізував цю пропозицію, проблема була виправлена!
Ерік ван дер

14

Нарешті я зміг це вирішити, перемістивши Embed App Extensionsскрипт у Build Phasesmain Target на останню позицію.


Отримав цю помилку в 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
це працює, але лише один раз, а потім у наступній команді збірки проблема повертається.
Сваті

6

Я стикався з такою ж проблемою: нижче була помилка

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

Я вирішив це, використовуючи наступні кроки:

1). Перейдіть до цільової групи RxCocoa у проекті Pods-MyAppName

2) Перейти до побудови фаз

3) Перетягніть Фазу заголовків і перемістіть її вище фази збірки джерел дотримання.

Це вирішило мою проблему. Сподіваюся, це допоможе!


6

SchemeЗнайдіть у цілі мітку Buildта переконайтеся, що Find Implicit Dependenciesїї не позначено. Ці кроки можуть спрацювати.


Коли ви говорите "закрити", ви маєте на увазі, що він повинен мати колір і галочку? Або що вона повинна бути порожньою, без галочки?
Бен Ледж'єро,

1
Привіт, @BenLeggiero. "Закрити" означає, що воно має бути порожнім, без позначки.
Nh Xu

3

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


Дивно, як ніхто не оцінив це рішення. Просто, але це має бути перше, що ми повинні спробувати, перш ніж глибше розбиратись у проблемі.
Хун,

3

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

У моїх цільових заголовкових файлах у мене був #import "...-swift.h"файл, а потім у пару моїх швидких файлів я включав ці файли із зазначеним імпортом і, таким чином, викликав циклічну залежність.

Це StackOverflow, який змусив мене знайти рішення:

Завдання C, проблема швидкої сумісності через циркулярну залежність

Як запобігти круговому посиланню, коли заголовок, що перекриває Swift, імпортує файл, який імпортує сам Hopscotch-Swift.h

РЕДАГУВАТИ:

Я завершив перетворення вищезазначених файлів у швидкий, і це вирішило мою проблему.


2

Здається, вам потрібно змінити порядок фаз складання в межах ваших цілей Pods. Для мене працювало переміщення заголовків над іншими. Ви можете автоматизувати це у своєму підфайлі:

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

Увімкнувши його (встановлено на ТАК), позбувся помилки.


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" для моєї сутності, і я зіткнувся з цією помилкою. Отже, якщо ви вважаєте, що ваша помилка така ж, як і моя щодо основних даних, то, мабуть, вам може допомогти (і мені допомогло):

  • клацніть на свою сутність у файлі "xcdatamodel"
  • перейдіть до правої панелі та натисніть Інспектор моделей даних
  • змінити "Модуль" на "Поточний модуль продукту"
  • і, нарешті, змініть "Codegen" на "Вручну / Немає"
  • прибирати і будувати

Я думаю, оскільки в інших сценаріях Xcode створює файл автоматично, а коли ми створюємо інший, це спричиняє конфлікт.


1

Xcode 10.2.1 / Тестова одиниця тесту. Моя одинична тестова ціль не залежить від цілі хоста для покращення часу нарощування. Вирішити її зніміть прапорець Find Implicit Dependenciesв Scheme- Buildваріанти, Як я вказати всі залежності в Build Settings- Compile Sources.


0

Ви можете виправити це тут:

Файл -> Налаштування робочої області -> Система побудови: Нова система побудови

Налаштування робочої області


0

Я пробував речі з цієї сторінки, але єдине, що мені допомогло, це те, що я зробив копію цілі та оновив назву копії (видалив суфікс копії), а також видалив стару, а потім встановив pod.


0

З цією проблемою я зіткнувся після оновлення Xcode до версії 11.4. Пониження до 11.2.1 виправлено.


0

Xcode: 11.3.1 Ціль: ціль XCUITest

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

  2. Змінення налаштувань робочої області: Виберіть Legacy Build System

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


-1

Для мене працювали два варіанти: Файл-> Налаштування проекту / робочої області.

1, змініть систему збірки на "Спадкова система збірки" у меню Файл-> Налаштування проекту

2, Відредагуйте схему та виберіть параметр "Паралелізація побудови" у розділі "Збірка".


Це не пов’язано. Сучасна система складання цього не спричиняє.
Raptor

-1

На панелі проекту на LHS для своїх продуктів збірки не вибирайте їх у списку для цільового членства в області RHS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.