내부 순환; 빌드하면 신뢰할 수없는 결과가 발생할 수 있습니다. 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 / storyboard에 대해 동일하게 표시됩니다. 레거시 빌드 시스템으로 되 돌리지 않고이 오류를 어떻게 해결할 수 있습니까?
Xcode 10 빌드 시스템에 문제가있는 사람은 다음 단계에 따라 문제를 해결하십시오.
- Xcode에서 File-> Project / Workspace settings로 이동합니다.
- 빌드 시스템을 레거시 빌드 시스템으로 변경합니다.
새로운 Xcode로 빌드 문제가 해결됩니다.
새로운 빌드 시스템으로 작업하려면 이 Apple Xcode 도움말 페이지에서 문제 해결 도움말 을 찾을 수 있습니다 .
Cocoapods 에서이 문제가 발생했습니다. 해결책은 빌드 폴더를 정리하고 모든 포드를 다시 설치 한 다음 앱을 다시 빌드하는 것입니다. 문제는 저절로 해결되었습니다.
모든 '파일 복사'및 '라이브러리와 바이너리 연결'빌드 단계 이전에 '번들 리소스 복사'빌드 단계를 이동하여 문제를 해결했습니다.
Xcode 10의 새로운 빌드 시스템은 빌드에서 종속성주기를 감지하고이를 해결하는 데 도움이되는 진단을 제공합니다. 이러한 종속성주기를 수정하면 빌드의 안정성이 향상되어 올바른 제품이 일관되게 생성됩니다 (주기는 파생 데이터를 삭제해야하는 가능한 원인 일 수 있음). 또한 빌드의 주기로 인해 빌드 그래프의 항목이 각 빌드에서 항상 최신 상태가 아니므로 빌드 할 때마다 빌드가 불필요하게 다시 실행되므로 증분 빌드 시간이 향상됩니다.
Xcode Help : https://help.apple.com/xcode/mac/current/#/dev621201fb0 에 몇 가지 일반적인 종속성주기 유형을 해결하는 방법에 대한 문서가 있습니다.
즉,이주기 진단은 약간 이상해 보입니다. 빌드 단계를 다시 정렬하여 문제를 해결할 수 있었던 것 같지만 진단이 실제로 문제를 설명하지 못했다고 생각합니다. 마음에 들지 않으시면이 특정 사례에 대한 진단 개선에 대한 버그 보고서를 보내 주시면 감사하겠습니다. https://bugreport.apple.com 에서 신고 할 수 있습니다 . 관련성이 있다고 생각되는 프로젝트에 대한 모든 세부 정보를 포함하십시오. 문제를 재현하는 샘플 프로젝트가 이상적이지만 첨부 할 수없는 경우 프로젝트 구조에 대한 진단 및 몇 가지 아이디어가 여전히 도움이됩니다.
Cocoapods에서이 문제가 발생했으며 임시 해결 방법을 찾았습니다.
- 최신 버전의 cocoapods (1.5.3) 설치 :
sudo gem update cocoapods
- 파생 된 데이터를 삭제합니다.
rm -rf ~/Library/Developer/Xcode/DerivedData/*
pod install
여기에 소스가 있고 Xcode 10 베타 4에 있습니다.
편집 : 이제 Xcode 10.0에서 여전히 관련이 있습니다.
마침내 메인 타겟의 Embed App Extensions
스크립트 Build Phases
를 마지막 위치 로 이동하여이 문제를 해결할 수있었습니다 .
Swift, Objective-C 및 CoreData 간의 혼합 상호 작용과 유사한 문제가 발생했습니다 . 내 프로젝트 (Swift로 작성 됨)에서도 Core Data의 자동 생성 된 Swift 클래스를 사용했습니다.
그러나 한때 핵심 데이터 엔터티를 참조하는 공용 속성 (헤더 대응 부분에 정의 됨)이있는 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
나는 공유 스위프트 헤더 import 문을 제거하고 그것을 변경 @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
그리고 그것은 걱정거리를 만들지 않았습니다.
대상의에서 Scheme
레이블을 발견 Build
하고, 그 확인 Find Implicit Dependencies
확인하지 않습니다. 이 단계는 작동 할 수 있습니다.
나는 같은 문제에 직면했다 : 아래는 오류였습니다.
대상 'Pods-MyAppName'과 'RxCocoa'간의 종속성을 순환합니다. 건물은 신뢰할 수없는 결과를 생성 할 수 있습니다. 이는 일반적으로 소스 컴파일 이전에 대상의 헤더 빌드 단계를 이동하여 해결할 수 있습니다. 주기 경로 : Pods-MyAppName → RxCocoa → Pods-MyAppName
아래 단계를 사용하여 해결했습니다.
1). Pods-MyAppName 프로젝트의 대상 RxCocoa로 이동
2) 빌드 단계로 이동
3) Headers Phase를 드래그하여 Complile Sources 빌드 단계 위로 이동합니다.
이것은 내 문제를 해결했습니다. 도움이 되었기를 바랍니다.
내 솔루션은 단순히 빌드 폴더를 정리 한 다음 다시 빌드하는 것입니다.
사실, Xcode의 prompt에만주의를 기울 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
같은 문제에 새로운 빌드 시스템Version 10.0 beta 3 (10L201y)
을 갖고 싶었습니다 .
문제가 비활성화되었습니다 Enable Modules (C and Objective-C)
에 Build Settings -> Apple Clang - Language - Modules
활성화 한 후 (예로 설정) 오류를 제거했습니다.
내 프로젝트를 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
포드 대상 내에서 빌드 단계의 순서를 변경해야하는 것 같습니다. 나를 위해 헤더를 나머지 위로 이동하면 효과가 있습니다. 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
Core_Data
I had the same problem and error but mine happened when I "Created NSManagedObject Subclass" for my entity and I faced this error. So if you think your error is same as mine about Core Data what can probably help you (and helped me ) is to:
- click on your Entity in you "xcdatamodel" file
- go to your right bar click on Data Model Inspector
- change "Module" to "Current Product Module"
- and finally, change "Codegen" to "Manual/None"
- clean and build
I think because in other scenarios Xcode creates a file automatically and when we create another one it causes a conflict.
My issue had to do with a cyclical dependency between my swift bridging header and my objective c files.
In my objective c header files I had a #import "...-swift.h"
file and then in a couple of my swift files I was including those files with said import and thus causing a cyclical dependency.
This is the StackOverflow that led me to find the solution:
Objective C, Swift Interoperability issue due to circular dependency
EDIT:
I wound up converting the above files to swift and this solved my issue.
Xcode 10.2.1/Unit Test Target. My unit test target is independent of host target to improve building time. Solve it by uncheck Find Implicit Dependencies
in Scheme
- Build
options, As i specify all dependencies in Build Settings
- Compile Sources
.
You might be able to fix this here:
File -> Workspace Settings -> Build System: New Build System
이 페이지에서 작업을 시도했지만 도움이 된 유일한 것은 대상의 복사본을 만들고 복사본의 이름을 업데이트하고 (복사 접미사 제거) 이전 항목을 삭제하고 나중에 포드 설치를 수행 한 것입니다.
"스크립트 실행"을 빌드 단계의 맨 위로 이동하여이 문제를 해결했습니다.
다음 두 가지 옵션이 효과적이었습니다. File-> Project / Workspace settings.
1, 파일-> 프로젝트 설정에서 빌드 시스템을 "레거시 빌드 시스템"으로 변경합니다.
2, 구성표를 편집하고 빌드 섹션에서 "병렬화 빌드"옵션을 선택합니다.
'programing tip' 카테고리의 다른 글
InvalidKeyException 잘못된 키 크기 (0) | 2020.12.15 |
---|---|
Java에서 문자를 정수로 변환 (0) | 2020.12.14 |
React Hooks에서 componentWillMount ()를 사용하는 방법? (0) | 2020.12.14 |
자바 스크립트 : 같은 창에서 새 페이지 열기 (0) | 2020.12.14 |
요소가 div인지 확인 (0) | 2020.12.14 |