Ответ 1
В конце концов, я смог разрешить это, переместив скрипт Embed App Extensions
на Build Phases
основной цели до последней позиции.
Я пытаюсь перейти к новой системе сборки при компиляции с 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/раскадровки. Как я могу решить эту ошибку, не возвращаясь к устаревшей системе сборки?
В конце концов, я смог разрешить это, переместив скрипт Embed App Extensions
на Build Phases
основной цели до последней позиции.
Для любого, кто имеет проблемы с системой сборки Xcode 10, выполните следующие действия, чтобы исправить это:
- В Xcode перейдите в File-> Настройки Project/Workspace.
- Измените систему сборки на систему Legacy Build.
Он разрешит проблему сборки с новым Xcode.
Если вы хотите работать с новой системой сборки, вы можете найти справку по устранению неполадок на этой странице справки Apple Xcode.
У меня была эта проблема с Cocoapods. Решение состояло в том, чтобы очистить папку сборки, переустановить все контейнеры, а затем перестроить приложение. Проблема разрешилась именно так.
Новая система сборки Xcode 10 обнаруживает циклы зависимостей в вашей сборке и предоставляет диагностику, которая поможет вам их решить. Фиксирование этих циклов зависимостей повышает надежность вашей сборки, так что правильные продукты производятся последовательно (циклы являются возможной причиной необходимости удаления полученных данных). Это также улучшает ваши инкрементные времена сборки, так как циклы в сборке вызывают у вас что-то в вашем графике построения всегда быть устаревшим в каждой сборке, что делает сборку повторно выполняемой работы при каждом сборке без необходимости.
Существует документация по разрешению некоторых распространенных типов циклов зависимостей в справке Xcode: https://help.apple.com/xcode/mac/current/#/dev621201fb0
Тем не менее, эта диагностика цикла выглядит немного странно. Похоже, что вы смогли его решить, перестроив фазы сборки, но я не думаю, что диагностика действительно объяснила проблему. Если вы не возражаете, очень важно оценить отчет об улучшении этой диагностики для этого конкретного случая. Вы можете отправить файл на https://bugreport.apple.com. Пожалуйста, укажите всю информацию о своем проекте, который, по вашему мнению, может быть уместным; образец проекта, который воспроизводит проблему, идеален, но если вы не можете это прикрепить, диагностика и некоторое представление о структуре проекта по-прежнему будут полезны.
Я исправил свою проблему, переместив фазу сборки "Copy Bundle Resources" до того, как все мои "копии файлов" и "Связывание двоичных файлов с фазами сборки библиотек"
У меня была эта проблема с Cocoapods и я нашел временное решение:
sudo gem update cocoapods
rm -rf ~/Library/Developer/Xcode/DerivedData/*
pod install
Источник здесь и я на Xcode 10 beta 4.
РЕДАКТИРОВАТЬ: теперь на Xcode 10.0 и по-прежнему актуальны.
Я столкнулся с той же проблемой: ниже была ошибка
Цикл в зависимостях между целевыми "Pods-MyAppName" и "RxCocoa"; строительство может привести к ненадежным результатам. Обычно это можно решить, перемещая фазу сборки заголовков цели перед компиляционными источниками. Путь цикла: Pods-MyAppName → RxCocoa → Pods-MyAppName
Я решил это, используя следующие шаги:
1). Перейти к целевому RxCocoa в проекте Pods-MyAppName
2) Переход к этапам сборки
3) Перетащите фазу заголовков и переместите ее над фазой сборки исправлений.
Это исправило мою проблему. Надеюсь, поможет!
В целевой Scheme
найдите метку Build
и убедитесь, что Find Implicit Dependencies
не включена. Эти шаги могут работать.
У меня была похожая проблема со смешанным взаимодействием между 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
И это не беспокоило.
Та же проблема в Version 10.0 beta 3 (10L201y)
и я хотел иметь новую систему сборки.
Проблема отключена Enable Modules (C and Objective-C)
в Build Settings → Apple Clang - Language - Modules
После включения (установленного в YES), он избавился от ошибки.
Я столкнулся с подобной проблемой, когда пытался архивировать мой проект на 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
Кажется, что вам нужно изменить порядок фаз сборки внутри своих целей. Для меня работали над заголовками выше остальных. Вы можете автоматизировать это в своем подфайле:
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
Мое решение состояло в том, чтобы просто очистить папку сборки, а затем заново собрать.
У меня была та же проблема и ошибка, но моя произошла, когда я "создал NSManagedObject Subclass" для моей сущности, и я столкнулся с этой ошибкой. Поэтому, если вы считаете, что ваша ошибка в отношении Core Data такая же, как у меня, то, вероятно, вам может помочь (и помог мне):
Я думаю, потому что в других сценариях Xcode создает файл автоматически, а когда мы создаем другой, это вызывает конфликт.
Xcode 10.2.1/Цель модульного тестирования. Моя цель модульного теста не зависит от цели хоста, чтобы улучшить время сборки. Решите его, сняв флажок " Find Implicit Dependencies
в " Scheme
- " Build Settings
Build
, поскольку я указываю все зависимости в " Build Settings
- " Compile Sources
.
Вы можете исправить это здесь:
Файл → Настройки рабочего пространства → Система сборки: Новая система сборки
Я пробовал что-то с этой страницы, но единственное, что мне помогло, это то, что я сделал копию цели и обновил имя копии (удалил суффикс копии), удалил старую и после этого установил pod.
Моя проблема была связана с циклической зависимостью между моим быстрым мостовым заголовком и моими целевыми файлами c.
В моих целевых заголовочных файлах c у меня был файл #import "...-swift.h"
а затем в нескольких моих быстрых файлах я включал эти файлы в указанный импорт и, таким образом, вызывал циклическую зависимость.
Это StackOverflow, который привел меня к поиску решения:
Цель C, проблема быстрой совместимости из-за циклической зависимости
РЕДАКТИРОВАТЬ:
Я перевел конвертируемые выше файлы в swift, и это решило мою проблему.
Фактически, вам нужно только обратить внимание на приглашение 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
Я решил это, переместив "Run Script" в начало фаз сборки.
Следующие два варианта помогли мне: File-> Настройки проекта/Рабочего пространства.
1, Измените систему сборки на "Legacy Build system" в File-> Настройки проекта
2. Отредактируйте схему и выберите "Параллелизировать сборку" в разделе "Сборка".