티스토리 뷰

iOS & swift

xcode 빌드 시간 줄이기

ggasoon2 2023. 9. 6. 10:29

 

 

 

 

1. Build With Timing Summary

 

빌드 시간을 요약하고 최적화 해준다고 함.

 

 

 

 

 

 

 

 

2. Xcode Build Setting 수정 ( TARGETS -> Build Setting 에서 검색하면 나옴 )

 

    a) BUILD ACTIVE ARCHITECTURE ONLY

        Debug: Yes

        Release: No

 

    b) COMPILATION MODE
        Debug: Incremental
        Release: Whole Module

 

    c) OPTIMIZATION LEVEL

        Debug: No Optimization [-Onone]
        Release: Optimize for Speed [-O]

 

    d) DEBUG INFORMATION FORMAT (DWARF)

        Debug: DWARF
        Release: DWARF with DSYM File

 

 

 

3. code siginig 수정

    a) 암호화 기법 SHA-1 대신 빠른 SHA-256 으로 사용 (디버그 모드에서)

    b) 빈 resourceRules.plist 생성하여 처음 해시해야하는 작업 시간 줄임

    resourceRules.plist 의 코드

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
       <key>rules</key>
       <dict>
               <key>.*</key>
               <false/>
       </dict>
</dict>
</plist>

 

 

 



4. Pod 종속성 수정

 

Podfile 맨 아래에 코드 추가

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
             if config.name.include?("Debug") then
                config.build_settings['ONLY_ACTIVE_ARCH'] = 'YES'
                config.build_settings['OTHER_SWIFT_FLAGS'] = ['$(inherited)', '-Onone']
                config.build_settings['SWIFT_OPTIMIZATION_LEVEL'] = '-O'
                config.build_settings['SWIFT_COMPILATION_MODE'] = 'singlefile'
            end
        end
    end
end

 

 

 



5. init 타입 명시

 

위 이미지를 보면 UIColor를 init으로 하였는데 이러면 시간이 굉장히 소요됨

 

init할때 init하는 타입을 명시해주면 시간을 아주 절약할 수 있음

 

-> .init 대신 UIColor.init 사용

 

 

 

 

6. 시간 줄이는 code 작성

    a) 변수 선언시 가능한 let 사용

    b) 상속이 필요 없는 클래스의 경우 final 붙이기

    c) 외부의 접근이 없는 경우 private 사용하기

    d) 한줄 보다는 여러줄로 나눠서 작성하기

// Before:
let finalValue = CGFloat(collectionView.contentSize.height - (((self.viewModel as? CartViewModelV2)?.cancellationCellHeight ?? 0) + 44))

// After:
let collectionViewHeight: CGFloat = collectionView.contentSize.height
let cancellationCellHeight: CGFloat = (self.viewModel as? CartViewModelV2)?.cancellationCellHeight ?? 0
let finalValue = CGFloat(collectionViewHeight - (cancellationCellHeight + 44))

     e) optional 값에 대하여 ?? 보다는 if let 사용

 

 



 

 

 

그 외 시간 관련 설정

 


7. 터미널에 이 코드를 쳐서 빌드 시간을 측정할 수 있다.

defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

그러면 이렇게 시간이 뜸

 

 

 

 

8. 시간이 오래걸리는 (e.g. 100ms이상) code line 에 warning을 띄울 수 있다.

 

 

 

빌드셋팅 Other Swift Flags 에 아래 코드를 추가해줍니다

 

 

-Xfrontend -warn-long-function-bodies=100
-Xfrontend -warn-long-expression-type-checking=100

 

이런식으로 시간이 뜸 (11826ms)

 

 

 

위 방법으로

3 ~ 10분 걸리던 빌드를
1분 ~ 3분까지 줄어들었네요.

 

너무 유용하여 정리하였습니다 

 

 

 

출처: https://bytes.swiggy.com/build-time-optimizations-xcode-911c9c3ac8ff

 

댓글