Compile Time Incredibly Slow

后端 未结 8 1136
执笔经年
执笔经年 2020-12-22 23:57

My project consists of ~350 Swift files and ~40 cocoa pod dependencies.

As soon as the entire project was migrated to Swift 3, build times have been <

相关标签:
8条回答
  • 2020-12-23 00:07

    I'm using Xcode 8.1 My issue was with Dictionary which uses Nil-Coalescing Operator

    this is my code when it takes 10 minutes to build:

        let params: [String:String] = [
            "email": email ?? self.email,
            "clave": password,
            "tipo_documento": documentType?.rawValue ?? self.typeDocument.rawValue,
            "documento": number ?? self.documentNumber,
            "nombre": name ?? self.name,
            "apellidos": lastName ?? self.lastName,
            "fecha_nacimiento": birth?.parse() ?? self.birthDate.parse(),
            "genero": genre?.rawValue ?? self.genre.rawValue,
            "telefono_movil": cel ?? self.cel,
            "direccion": address ?? self.address
        ]
    

    I don't know why but it advertise me that the Dictionary take a long time to compile.

    Then I change it to:

        var params: [String:String] = [:]
            params["email"] = email ?? self.email
            params["clave"] = password
            params["tipo_documento"] = documentType?.rawValue ?? self.typeDocument.rawValue
            params["documento"] = number ?? self.documentNumber
            params["nombre"] = name ?? self.name
            params["apellidos"] = lastName ?? self.lastName
            params["fecha_nacimiento"] = birth?.parse() ?? self.birthDate.parse()
            params["genero"] = genre?.rawValue ?? self.genre.rawValue
            params["telefono_movil"] = cel ?? self.cel
            params["direccion"] = address ?? self.address
    

    Hope it could help some of you.

    0 讨论(0)
  • 2020-12-23 00:07

    SWIFT_WHOLE_MODULE_OPTIMIZATION = YES

    Xcode version: 8.1 GM

    To add choose your target, then go to Editor > Add Build Setting > Add User-Defined Setting, and add the above.

    My clean build time dropped from 35 mins (Ahem, excuse me) to 8 mins with a project file count of 800.

    Note: Tried this on Xcode 8.0 first, but didn't work.

    0 讨论(0)
  • 2020-12-23 00:12

    I found a couple of coding styles that take a lot of time compiling in Swift (2.3, not tested on 3):

    a += b 
    

    Should be

    a = a + b
    

    Also adding array together:

    var a = [1,3,4]
    var b = [5,6,7,8]
    var c = [8,4,3,5]
    var d = a + b + c
    

    Should be

    var a = [1,3,4]
    var b = [5,6,7,8]
    var c = [8,4,3,5]
    var d : [Int] = []
    d.appendContentsOf(a)
    d.appendContentsOf(b)
    d.appendContentsOf(c)
    

    The last optimization took the compilation time for 1 method from 9800ms to 5.5ms...

    0 讨论(0)
  • 2020-12-23 00:15

    Also string concatenation seems to be incredible slow in Swift3/XCode8:

    item.text = item.text + " " + pickerText + " " + (attribute?.Prefix ?? "") + inputText + (attribute?.Suffix ?? "")
    

    ~ took 8-10 seconds to compile

    item.text = "\(item.text) \(pickerText) \(attribute?.Prefix ?? "")\(inputText)\(attribute?.Suffix ?? "")"
    

    ~ took 1,6 seconds to compile

    item.text = [item.text, " ", pickerText, " ", (attribute?.Prefix ?? ""), inputText, (attribute?.Suffix ?? "")].joined();
    

    ~ took 0,001 second to compile

    0 讨论(0)
  • 2020-12-23 00:21

    Whenever you face slow compilation issue, closly looks the the third party SDKs you included in your app and also try to find your coding techniques.

    I face this issue twice in my app and I felt like harrassed by Swift 3

    0 讨论(0)
  • 2020-12-23 00:25

    Update 1:

    I created a new project without running the Swift 3 conversion, imported my Swift 3 files, but the build time remains the same.

    Update 2:

    I've tried SWIFT_WHOLE_MODULE_OPTIMIZATION = YES, but as soon as you make changes to more than 1 file, the incremental build fails and it triggers a re-build which lasts for more than 4-5 minutes.

    Update 3:

    I've now re-written my entire code base from Swift 3 to Swift 2.3. It didn't make any difference, the problem lies with the Xcode 8 compiler.

    Update 4:

    I can confirm that unchecking these two will alleviate the pain for a while, the Xcode 8 bug does seem to be tied to how it checks dependencies between files.

    Update 5:

    I've converted my code base to Swift 3 from Swift 2.3 since Xcode 8.2 beta requires it, the beta should include a fix for "Xcode will not rebuild an entire target when only small changes have occurred. (28892475)". Sad to say, they haven't fixed the bug and my compile times are exactly the same with Xcode 8.2 Beta.

    Original post:

    I don't have enough reputation to comment, but I still wanted to share some resources. I've been stuck in this misery for days, upgrading to Swift 3 has been a complete disaster.

    I'm using this to track slow files, even though just like you, that's not my problem. Something else in xcode is taking literally 4 minutes to complete: https://github.com/irskep/swift_compile_times_parser https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode

    I've also made sure I don't have any lazy vars or closures that swift doesn't like. Don't use the + operator when concatenating strings, etc. see this.

    I'll update this answer if I find anything, it's just about impossible to be productive with Swift 3 ATM.

    0 讨论(0)
提交回复
热议问题