매번 완전한 코드를 재 컴파일하는 Xcode 8


131

코드가 변경되면 (파일은 .pch가 아니더라도) 매번 완전한 프로젝트가 다시 컴파일됩니다.


31
이것이 다운 보트 인 이유는 무엇입니까?! 이것은 합법적 인 문제입니다. 매번 컴파일하는 데 4 분이 걸리고 모든 팀 생산성이 저하되었습니다.
Josh

1
나도이 문제가 발생합니다.
AJ9

3
IBDesignable을 사용하여 xib / 스토리 보드를 수정하고 있습니까?
Larme

1
관련 애플 포럼 스레드 : forums.developer.apple.com/thread/62737 . 여전히 해결 방법이 없습니다.
ldiqual

1
Apple 포럼에서 제안한대로 버그 보고서를 열어야합니다.
레오 나탄

답변:


34

2017/1/2 업데이트

이 문제는 Xcode 8.2.1에서 해결되지 않았습니다 (내 프로젝트).

어떻게 살아남는지?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

2016/12/17 업데이트

이 문제는 Xcode 8.2에서 해결되지 않았습니다.

2016/12/12 업데이트

빌드 및 디버그를위한 코드와 명령 행에 대한 원자가 이제 제 선택입니다. 애플이이 합법적 인 버그를 곧 고치길 바란다

2016/12/04 업데이트

이 문제는 Xcode 8.2 (베타 2)에서 해결 된 것으로 보입니다 .

그러나 나를 위해 해결되지 않으면 Xcode 8.2를 사용할 때도이 문제에 직면합니다. 당신은 (다운로드 Xcode8.2 베타 2 그것을 시도를 제공 할 수 있습니다 여기에 )

빌드 시스템 • Xcode는 작은 변경 사항이 발생한 경우 전체 대상을 다시 작성하지 않습니다. (28892475)


이전 답변 : 이것은 해결 방법입니다.

여기에 이미지 설명을 입력하십시오 "빌드 설정"탭-> "C 언어 방언"-> "컴파일러 기본값"으로 변경하십시오.

참고로 :

"C 언어 방언"이 "컴파일러 기본값"대신 "GNU99"로 설정되었습니다. 이전에는 표준이 GNU99 였지만 지금은 그렇지 않았습니다. 어느 시점에서 Xcode는 라이브러리 프로젝트 설정을 올바르게 마이그레이션하지 않았으므로 GNU99로 설정되었습니다. 일단 GNU99로 변경하면 매번 모든 코드를 다시 컴파일하는 것을 중단했습니다!


1
여태까지는 그런대로 잘됐다!!! 한 시간 만 주시면 현상금이 당신의 것입니다.
Adam Waite

7
그것은 다시 모든 것을 다시 컴파일로 돌아온다
Adam Waite

1
나는 같은 행동을합니다. 파생 된 데이터를 지우거나 C 언어 방언을 변경하면 약 10 빌드가 작동합니다. 그 후 그것은 모든 것을 재건하기 위해 되돌아갑니다.
bluebamboo

1
Xcode 8.2 (베타 2)는 10 빌드에서 작동하고 처음부터 모든 것을 다시 빌드하지만 여전히 이전 빌드보다 낫습니다.
Markus

3
불행히도 Xcode 8.3 베타 2 (적어도 우리에게는)에서 문제가 지속됩니다. 프로젝트에서 눈에 띄는 개선은 측정 할 수 없습니다.
Kasper Munck

20

제품-> 구성표-> 구성표 편집으로 이동하십시오. 왼쪽 열에서 빌드를 선택하고 선택을 취소 " 암시 적 종속성을 찾기 "

그러나이 플래그는 프로젝트를 처음 빌드 할 때 확인 상태를 유지해야합니다.


@Josh, 프로젝트 내에서 여러 프로젝트를 사용하고 있습니까 (예 : 하위 프로젝트 또는 포함). 그리고 실제로 모든 것을 재 구축하고있는 빌드 출력을보고 확신합니까?
모바일 벤

3
Cocoapod와 기본 프로젝트가있는 기본 작업 공간입니다. CocoaPods는 빌드 된 상태로 유지되지만 기본 프로젝트는 모든 파일을 다시 빌드합니다. 빌드 출력과 완전히 100 개 이상의 파일을 다시 빌드하는 것을 지켜보십시오.
Josh

1
업데이트 :이 솔루션은 그렇게 한 후 몇 가지 빌드에서 작동하는 것처럼 보이지만 전체 프로젝트를 정리하고 다시 빌드합니다. 그러나 2 ~ 8 번 재건하면 모든 것을 다시 컴파일하기 시작합니다. 어떤 아이디어? 좌절을 넘어서.
Josh

최소한 CocoaPods 작업 공간에서는 작동하지 않습니다. 모든 것이 매번 만들어집니다. 특히 애플 이이 문제를 해결하기 위해 수년이 있었기 때문에 매우 성가시다.
Womble

7

나를 위해 수정은 스토리 보드를 닫는 중이었습니다. 보조 편집기로 소스 파일을 열었고 스토리 보드 파일도 열었습니다 (스토리 보드를 닫지 않았기 때문에-변경하지 않았기 때문에) 불필요한 모든 컴파일이 제거되었습니다.


1
하 너무 쉬워요 :)
manmal

5

업데이트

내가 할 수 있었던 가장 큰 개선점은 프로젝트를 모듈화하는 것이 었습니다. 거의 모든 다른 클래스에 사용되는 ORM 계층을 구체적으로 모듈화합니다. 이 코드를 프로젝트 내 별도의 대상으로 옮기고 모듈로 가져와 컴파일 시간을 크게 향상시킬 수있었습니다. Xcode는 더 이상 빌드를 할 때 불필요한 파일을 다시 컴파일하기로 결정하지 않습니다.

이제 빠른 증분 디버그 빌드를 위해 단일 파일 컴파일 방법을 사용 합니다.

이 링크에는 코드 리팩토링, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5를 포함하여 다른 좋은 제안이 있습니다.

낡은

여전히 Xcode 9에서 계속 문제가되었습니다. 많은 여러분과 마찬가지로 많은 소스 파일 을 사용하여 큰 신속한 4 / cocoapods 프로젝트를 작업하고 매번 파일을 다시 컴파일 할 때마다 격렬합니다.

지금까지 다음 설정으로 최상의 결과를 얻고 있습니다. 나는 당신이 그것을 시도하고 그것이 당신을 위해 어떻게 작동하는지 볼 것을 제안합니다.

  • 스키마-> 빌드-> "암시 적 종속성 찾기"= TRUE
  • 빌드 설정-> 링크 타임 최적화 = 증분
  • 빌드 설정-> 최적화 수준 (디버그) = 없음 [-OO]
  • 빌드 설정-> 최적화 수준 (릴리스) = 가장 빠르고 작은 [-Os]
  • 빌드 설정-> 사전 컴파일 된 헤더의 공유 증가 = 예
  • 빌드 설정-> 증분 증류 사용 = 예

사용자 정의 사용자 정의 빌드 설정 추가

  • 빌드 설정-> HEADERMAP_USERS_VFS = YES

참고 : 전체 모듈 최적화에 대한 사용자 정의 사용자 정의 설정이 없습니다.


3

이 문제를 해결 한 것으로 보이는 접두사 헤더와 관련하여 코드에서 몇 가지 사항을 변경했습니다. 어느 쪽이 실제로 트릭을했는지 모르겠지만 다른 누군가에게 도움이되기를 바랍니다. 접두사 헤더가 설정되어 있지 않으면 이것이 문제가 아닌 것 같습니다 (또는 문제가 다각적입니다).

  1. 빌드 된 제품 디렉토리의 파일 인 접두사 헤더에서 가져 오기를 제거하여 이에 대한 빌드 설정 ( "사전 컴파일 된 헤더가 빌드 디렉토리의 파일을 사용함")을 "아니오"로 변경할 수 있습니다. 다른 가져 오기를 통해 간접적으로 가져 오지 않아야합니다.
  2. Clang 모듈을 사용하는 접두사 헤더에서 헤더 디렉토리에 module.modulemap 파일이있는 라이브러리 또는 프레임 워크를 가져 와서 코드를 작성할 수 있도록하십시오 @import MyModule. (나에게 이것은 1 단계와 1 단계는 동일했습니다.)
  3. 접두사 헤더 공유에 대한 빌드 설정을 "예"로 설정하십시오. (필요하지 않다고 생각하며 내 프로젝트에는 아무런 영향을 미치지 않아야합니다. 아무것도 시도하려고했기 때문에 변경했기 때문에 이것을 진술하고 있습니다. :))
  4. Xcode를 종료하고 DerivedData / ModuleCache 디렉토리를 삭제하십시오 (정확하게 기억하면 ~ / Library / Developer에 구성되어 있습니다).

그래도 작동하지 않으면 접두사 헤더에서 가져 오기를 더 제거 할 수 있습니다. 그것을 넘어 뜨리는 무언가가있을 수 있습니다 ...


3

https://forums.developer.apple.com/thread/62737 에 따라 적극적으로 작업하고있는 것처럼 보이지만 해결 방법은 추가하는 것입니다

HEADERMAP_USES_VFS = YES

대상의 빌드 설정에서 (프로젝트-> 대상-> 빌드 설정-> 사용자 정의).

이 솔루션은 지난 달 동안 다른 솔루션이 일관되게 작동하지 않으면 서 매일 저에게 효과적이었습니다.

편집 :이 설정을 정의하면 훨씬 덜 자주 보이지만 여전히 모든 것을 다시 컴파일하는 경우가 있습니다.


또한이 값을 추가했습니다. 빌드 시간이 빠르지 만 증분 빌드를 해결하지 못했습니다. Swift Compiler-코드 생성 / 디버그를 빠른 전체 모듈 최적화로 변경했습니다. 지금까지 최고의 결과입니다.
Antonio Junior

나는 심지어 사용자 정의를 찾을 수 없습니다)
David Seek

2
@DavidSee 빌드 설정 맨 아래
레이저 호크


3

@IBDesignable스토리 보드 에서이 @IBDesignable속성 이 포함 된 뷰가 있기 때문에 Xcode 빌드 프로젝트에서 항상 지시문에 대한 모든 코드를 확인하십시오 . 두 번째는 스토리 보드를 별도의 창 (탭이 아닌)으로 열어서 Xcode가 모든 시뮬레이터를 영원히 빌드하도록 강요하는 것입니다.


우리는 꽤 많은 @IBDesignable지시문을 사용합니다 ... 특히 우리가 찾아야 할 것이 있습니까?
Stan

하나씩 제외하여 찾을 수 있다고 생각하고 결과를 확인하십시오. 제 경우 전체 프로젝트에서 @IBDesignable 지시문 중 2 개였습니다.
ua24

2

Madhuri Mane은 이것에 관해 전적으로 옳습니다. 좀 더 명확하게하기 위해 몇 가지 중요한 사항에 유의하십시오.

대상이 의존하는 라이브러리 / 프레임 워크에 대한 암시 적 종속성이있는 경우에만 적용 할 수 있습니다.

"암시 적 종속성 찾기"가 비활성화 된 경우 :

결과 : 애플리케이션 대상을 빌드하기 전에 라이브러리가 빌드되지 않습니다. 응용 프로그램 대상을 빌드하지 못했습니다.

수정 : 두 번째 시나리오가 발생하지 않도록하려면 필요한 대상을 대상 목록에 추가하고 올바르게 정렬해야합니다.

주제에 대한 소스 및 추가 자료 : https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

이제 전체 프로젝트가 하나의 대상 내에 있고 컴파일하는 데 4 분이 걸리는 경우 위의 이점을 활용하거나 컴파일이 지연되는 위치를 파악하기 위해 프레임 워크로 분리하는 것 외에는 할 일이 많지 않습니다. PaintCode와 같은 것을 사용하거나 빠른 UIKit 코드 덩어리를 Objective-c로 빠르게 변경하면 훨씬 빠르게 컴파일됩니다.


2

대상의 빌드 설정으로 이동하여로 설정 Defines Module하십시오 Yes.

몇 가지 빌드를 위해 저를 위해 일했습니다. 이것이 결정적인 해결책이라고 주장하기에는 너무 이르지만 적어도 우리는 노력하고 있습니다.


2

애플은 어제 새로운 베타 버전의 Xcode를 발표했다 (11 월 14 일)

Xcode 8.2 beta 2

이 문제는 릴리스 정보에서 해결 된 것으로 표시되었습니다.

시스템 구축

• 작은 변화 만 발생한 경우 Xcode는 전체 대상을 다시 작성하지 않습니다. (28892475)

나를 위해 일하고 있습니다. 평소대로 빌드 속도가 돌아 왔습니다. 이 문제에 직면 한 모든 사람들이 시도해보십시오!

https://developer.apple.com/download/


2

프로젝트의 빌드 설정으로 이동하여 "C 언어 방언"을 변경하십시오.

xcode 버전을 업데이트하면 "C 언어 방언"이 "컴파일러 기본값"대신 "GNU99"로 설정됩니다. 어느 시점에서 Xcode는 라이브러리 프로젝트 설정을 올바르게 마이그레이션하지 않았으므로 GNU99로 설정되었습니다. 이것은 문제를 해결할 것입니다


1

Swift 파일을 변경하여 앱 빌드를 시작한 경우 마지막 탭으로 이동하여 빌드 로그를 클릭하십시오. "종속성 확인"단계에서 빌드를 중지하고 다시 실행하십시오. 두 번째 실행에서는 수정 한 파일 만 빌드해야합니다. 올바르게 수행하면 매번 작동한다는 것을 알았습니다. 프로젝트 설정을 변경할 필요가 없습니다.

이것은 Xcode의 버그 인 것 같습니다.

여기에 이미지 설명을 입력하십시오

앱이 전체 빌드를 수행하고있는 경우 빌드를 중지하고이 트릭을 다시 시도하십시오.

코드를 변경하지 않은 경우 디버거를 연결하는 앱을 빌드하지 않고 CMD + CTRL + R을 사용하여 실행하십시오. 앱을 만들지는 않지만 불필요한 시간을 절약 할 수 있습니다.


이것은 실제로 작동하지만 때로는 코드 1로 XCode가 실패하고 클린 빌드를 만들어야합니다. 악몽이다
Antonio Junior

Xcode가 항상 전체 빌드를 수행하는 다른 시나리오가 있습니다. 브리징 헤더에 포함 된 .h 파일을 수정하면 모든 Swift 파일이 다시 작성됩니다. Xcode 버그와 관련이없는 다른 시나리오가있을 수 있습니다.
Vlad

유일한 변경 사항은 함수 이름 바꾸기 또는 기존 클래스 / 구조에 추가 된 전체 속성으로 전체 재구성이 이루어지는 시나리오가 있습니다.
Antonio Junior

이 질문 / 답변을 참조하십시오.이 글타래는 다음과 같습니다 : 더 나은 해결책을
Vlad

1

"암시 적 종속성 찾기"솔루션에 선택 취소를 적용하여 문제가 해결되었습니다.

그러나 cocoapods를 사용하는 경우이 설정을 선택하여 pod 프로젝트에도 적용하려면

제품-> 구성표-> 포드- "yourProjectName"

다음에도 적용됩니다.

제품-> 구성표-> "yourProjectName"

도움이되었으므로이 힌트가 다른 사람에게 도움이되기를 바랍니다.

감사


1

1. 프로젝트로 이동합니다. 2. 빌드 설정을 클릭합니다. 3. 디버깅을 위해 OptimizationLevel이 없음으로 설정되어 있는지 확인합니다. 4. 사용자 정의 설정 추가를 클릭하십시오. 5. SWIFT_WHOLE_MODULE_OPTIMIZATION을 YES로 설정하십시오.

여기에 이미지 설명을 입력하십시오


하나의 문자를 쓸 때 여전히 컴파일 할 수있는 것은 없습니다.
Chandni

-2

xcode의 컴파일 시간을 단축하려면 IRAMDISK (가상 메모리 디스크)를 사용할 수 있습니다. 컴파일 시간을 단축하는 매우 유용하고 효과적인 방법입니다.

자주 사용하는 응용 프로그램의 속도를 높이는 데 사용할 수도 있습니다.

다운로드하여 사용하려면 다음 링크를 참조하십시오. http://iramdisk.findmysoft.com/mac/


SSD 디스크가 이미 있으면 컴파일 속도가 빨라지지 않습니다.
Jano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.