programing tip

내부 순환;

itbloger 2020. 12. 14. 07:57
반응형

내부 순환; 빌드하면 신뢰할 수없는 결과가 발생할 수 있습니다. 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 빌드 시스템에 문제가있는 사람은 다음 단계에 따라 문제를 해결하십시오.

  1. Xcode에서 File-> Project / Workspace settings로 이동합니다.
  2. 빌드 시스템을 레거시 빌드 시스템으로 변경합니다.

새로운 Xcode로 빌드 문제가 해결됩니다.

새로운 빌드 시스템으로 작업하려면 이 Apple Xcode 도움말 페이지에서 문제 해결 도움말 찾을 수 있습니다 .


Cocoapods 에서이 문제가 발생했습니다. 해결책은 빌드 폴더를 정리하고 모든 포드를 다시 설치 한 다음 앱을 다시 빌드하는 것입니다. 문제는 저절로 해결되었습니다.


모든 '파일 복사'및 '라이브러리와 바이너리 연결'빌드 단계 이전에 '번들 리소스 복사'빌드 단계를 이동하여 문제를 해결했습니다.


Xcode 10의 새로운 빌드 시스템은 빌드에서 종속성주기를 감지하고이를 해결하는 데 도움이되는 진단을 제공합니다. 이러한 종속성주기를 수정하면 빌드의 안정성이 향상되어 올바른 제품이 일관되게 생성됩니다 (주기는 파생 데이터를 삭제해야하는 가능한 원인 일 수 있음). 또한 빌드의 주기로 인해 빌드 그래프의 항목이 각 빌드에서 항상 최신 상태가 아니므로 빌드 할 때마다 빌드가 불필요하게 다시 실행되므로 증분 빌드 시간이 향상됩니다.

Xcode Help : https://help.apple.com/xcode/mac/current/#/dev621201fb0 에 몇 가지 일반적인 종속성주기 유형을 해결하는 방법에 대한 문서가 있습니다.

즉,이주기 진단은 약간 이상해 보입니다. 빌드 단계를 다시 정렬하여 문제를 해결할 수 있었던 것 같지만 진단이 실제로 문제를 설명하지 못했다고 생각합니다. 마음에 들지 않으시면이 특정 사례에 대한 진단 개선에 대한 버그 보고서를 보내 주시면 감사하겠습니다. https://bugreport.apple.com 에서 신고 할 수 있습니다 . 관련성이 있다고 생각되는 프로젝트에 대한 모든 세부 정보를 포함하십시오. 문제를 재현하는 샘플 프로젝트가 이상적이지만 첨부 할 수없는 경우 프로젝트 구조에 대한 진단 및 몇 가지 아이디어가 여전히 도움이됩니다.


Cocoapods에서이 문제가 발생했으며 임시 해결 방법을 찾았습니다.

  1. 최신 버전의 cocoapods (1.5.3) 설치 : sudo gem update cocoapods
  2. 파생 된 데이터를 삭제합니다. rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. 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.

실행, 성공적으로 컴파일되었습니다.

원칙은 간단합니다. 컴파일 순서 만 변경하면됩니다.

이미지 1

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

How to prevent circular reference when Swift bridging header imports a file that imports Hopscotch-Swift.h itself

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, 구성표를 편집하고 빌드 섹션에서 "병렬화 빌드"옵션을 선택합니다.

참고 URL : https://stackoverflow.com/questions/50709330/cycle-inside-building-could-produce-unreliable-results-xcode-10-error

반응형