Цикл внутри; здание может привести к ненадежным результатам: 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, выполните следующие шаги для ее устранения:
- В Xcode, перейдите в File->Project/Workspace settings.
- Измените систему сборки на 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 и я нашел временное решение:
- Установите последнюю версию cocoapods (1.5.3):
sudo gem update cocoapods
- Удалить ваши производные данные:
rm -rf ~/Library/Developer/Xcode/DerivedData/*
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, и это решило мою проблему.
Вы можете исправить это здесь:
Файл -> Настройки рабочего пространства -> Система сборки: Новая система сборки
Похоже, вам нужно изменить порядок этапов сборки в пределах ваших целей 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
Запустите команду для очистки папки сборки: rm -rf ~/Library/Developer/Xcode/DerivedData/*
Измените настройки рабочего пространства: выберите 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, попробуйте следующее:
- Бегать
flutter clean
в терминале или из меню Android Studio - Очистите папку сборки в XCode (Продукт -> Очистить папку сборки).
- Закомментируйте каждый бит собственного кода, который вы добавили в основной класс приложения, который ссылается на другие файлы.
- Закомментируйте все, кроме
#import "GeneratedPluginRegistrant.h"
в вашем заголовочном файле моста ([project name]-Bridging-Header.h
по умолчанию, я думаю) - Нацельтесь на симулятор и запустите приложение из XCode.
- Раскомментируйте все, что вы закомментировали на шагах 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 ..
Только для Экспо
-
expo prebuild --clean
-
cd ios
-
pod install
-
yarn ios