Xcode 6 Beta not compiling - xcode

I've got the following problem:
I've written my first Swift App (for iOS7) and it worked fine.
After changing some minor detail (adding a string somewhere) it wouldn't compile anymore, even if I changed everything back how it was before.
There is no error message or anything like it, it says that it's building the project (Compiling Swift Source Files) but it's not progressing at all, even after hours of "building".
I've tried it with Xcode 6 b1 and b2 and with both it's the same: all the other projects are compiling without any problems, this one get's stuck.
Does anyone have a clue what might be the problem and how to solve it?

Debug the code manually works for me.
Finally I find the root cause of my problem is too many string concatenation in one line.
Bug code:
var string = string1 + string2 + string3 + string4 + string5 + string6 + string7 + string8
Fixed code:
var string = string1
string += string2
string += string3
string += string4
string += string5
string += string6
string += string7
string += string8

Xcode 6 Beta sometimes does not show any error but there will be some errors in your code. Because of that it does not compile.
Try to comment different parts of code and then try to compile. You have to find out the error manually.
I had this issue because I had some errors in my code but it was not showing.
Debug it manually. All the best.

Xcode 6 Beta 5 went into a tailspin for me immediately after I wrote out an expression to concatenate 3 strings and an NSDate object with the "+" operator.
Wouldn't compile and got stuck indexing.
Search your code for long string concats and remove for now. This is clearly a bug.

Several things you can try:
Clean the project: Product -> Clean
Go to Product try other options such as Analyze or Profile, see if it still stuck on build.
Restart xcode
Reboot System
Open system console and try to trace the problem.
Last but most importantly, really, because they are beta version, there will be some unexpected bugs. If it still cannot be solved, please report it to Apple and expect it to be fixed in beta 3.
Based on your comment, go to Terminal and type in: defaults write com.apple.dt.XCode IDEIndexDisable 1

This bug will relate to our project state and source code.
I rolled back some commits of my project, xcode succeeded indexing my project.
In my case, xcode failed to index, when my project has a declaration of large dictionary.
(I succeed indexing after removing it.)

Related

Compile Time Incredibly Slow

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 INCREDIBLY slow and took a little over 3 minutes to completely compile.
I've noticed that if I rebuild after not changing any files, it builds within a reasonable amount of time. However, if I add a new function, it takes the 3+ minutes.
Cocoapods does not seem to be causing the problem as it delays on Compiling Swift source files state.
I followed this to investigate:
Added the -Xfrontend -debug-time-function-bodies flag to my Other Swift Flags in my target's build settings
Build the project
Copied this into terminal and ran pbpaste | egrep '\.[0-9]ms' | sort -t "." -k 1 -n | tail -100
However, I didn't see anything of concern. The file that took the longest to compile was only 250ms. The next closest was 100ms, even if all 350 files took 250ms to compile, that would only be a total of 73 seconds which is way off from the 3+ minute builds I am seeing.
What could be causing these long compile times?
It was never as slow before updating to Xcode 8 and Swift 3.
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.
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.
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
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.
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...
I migrated a Swift 2x project of 17 files to Swift 3 and had 28 warnings and 55 errors across all files. Compile time was 4-5 minutes.
Disabling
Find Implicit Dependancies
in scheme and
SWIFT_WHOLE_MODULE_OPTIMIZATION = YES
made only minor improvements.
As I eventually cleared the warnings and errors in each file, the compile time reduced and is now in the seconds. The IDE is back behaving as it should - detecting errors in near real time and compiling quickly.
Firstly, it looks like the compiler is recompiling (or at least cross checking) every file with any error or warning - even if you haven't edited that file since the last compile.
Secondly, if there are too many dependant errors/warnings across files, the compiler bottlenecks and slows right down.
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 😡. Both the times reasons were different.
First time I found that I added a library in my app named AASignatureView. Since this lib was added, my compilation time increased like hell. It started taking near 12-15 Mins in running the app on simulator. The issue was resolved after I removed this lib from my code and added VMSignatureView and my compilation time went into normal state.
Second time I faced this issue after making a code of appending several Strings. Both of these below methods turned app's compilation time to hell
a = a + b
and
a += b
Then I changed my code to below way and the problem was solved.
a = "a\(strSometihng),\(strAnother)"
Concatenating several Strings also can cause increasing compiling times, for example in my case, my compilation times where very high because of this line:
let fecha = post.dia + " " + post.num_dia + " " + post.mes + " - " + post.hora
When i changed the code to this, it satart compiling in seconds:
var fecha = post.dia!
fecha = fecha + " "
fecha = fecha + post.num_dia!
fecha = fecha + " "
fecha = fecha + post.mes!
fecha = fecha + " - "
fecha = fecha + post.hora!

Swift NSDate Xcode error - SourceKitService terminated

import Foundation
var currentTime = NSDate()
println("It is currently", currentTime)
This Swift code is very simple and should work, correct? Why am i receiving an error that says "SourceKitService terminated - editor functionality currently limited"
Am I doing something wrong or is it the beta's fault?
You would use string interpolation as Jack Wu suggested in the first comment:
println("It is currently \(currentTime)")
The println primary function does not take multiple arguments. You could also use
println(currentTime)
However, the fact that your first (syntax error) attempt causes Xcode 6 to crash (at least it does for me) is certainly a bug. You should just get an issue reported.

xcode 5.1 error implicit conversion loses precision

I updated to Xcode 5.1 and can no longer build several of my projects which use Core Plot 1.4, complaining generally about garbage collection, and proposing that I convert to ARC. I complied, but there were several statements that could not be converted. I quickly came to SO to find a solution, and I found a promising one here:
Core Plot and Xcode 5.1 - How to convert Core Plot to ARC?
I followed this suggestion, and it worked for the conversion to ARC. However, I was now left with 2 errors (not warnings) in CPTTextStylePlatformSpecific.m, which complained: “Implicit conversion loses integer precision: 'NSTextAlignment' (aka 'unsigned long') to 'CPTTextAlignment' (aka 'enum _CPTTextAlignment’)”. This issue had not appeared when building the project before the Xcode update.
The offending code:
// Text alignment and line break mode
NSParagraphStyle *paragraphStyle = [attributes valueForKey:NSParagraphStyleAttributeName];
if ( paragraphStyle ) {
newStyle.textAlignment = paragraphStyle.alignment;
newStyle.lineBreakMode = paragraphStyle.lineBreakMode;
}
return [[newStyle copy] autorelease];
And here:
// Text alignment and line break mode
NSParagraphStyle *paragraphStyle = [attributes valueForKey:NSParagraphStyleAttributeName];
if ( paragraphStyle ) {
newStyle.textAlignment = paragraphStyle.alignment;
newStyle.lineBreakMode = paragraphStyle.lineBreakMode;
}
return newStyle;
In both cases, the error was on the line
newStyle.textAlignment = paragraphStyle.alignment;
I am guessing the enum is an integer, and the integer to long assignment is the issue. Seems like it merits a warning, not an error. Is there a compiler flag I can set to achieve this? Or is there a bigger issue I am missing?
I had exactly this issue and found that in the CorePlot project, that I had imported into my project, I had the "Apple LLVM 5.1 - Warning Policies", "Treat Warnings as Errors" set you "Yes". I still get the warning but at least I can build and submit my project.
This is still not ideal and I would really like a proper solution - I suppose I'll just have to keep checking the CorePlot repository for updates.

Using dictionary in Visual Basic: An item with the same key has already been added

Whilst creating this program in visual studio 2010 i have encountered a problem.
I read in contents of a textfile and search through each line to make sure when adding a new product, that their are no existing IDs the same. contents of file look like this:
0001|Unsmoked Middle Bacon
0002|Smoked Middle bacon
0003|Unsmoked Bits
So if a user tries to add a value '0001' it springs an error. Only my code is springing an error...
appPath = Application.StartupPath
productDB = New Dictionary(Of Integer, String)
For Each line In IO.File.ReadAllLines(appPath & "/productlist.txt")
Dim data = line.Split("|")
productDB.Add(CInt(data(0)), data(1))
Next
If productDB.ContainsKey(newID) Then
MsgBox("Prompt of same ID")
Else
MsgBox("Accepted fine")
End If
on the line - productDB.Add(CInt(data(0)), data(1)) - I seem to be springing the error
ArgumentException was unhandled.
An item with the same key has already been added.
Alot of people have been mentioning their resources.resx file messing things up, but i have tried all sorts and nothing seems to be helping :(
cheers,
robbie.
My own silly mistake.
There was already a duplicate entry within the textfile. (I had about 40 lines)
So it wasn't anything to do with the 4 digits I was wanting to enter, the error was happening upon reading in each line.
"D'oh" - Homer Simpson

New line or Carraige Return syntax problems

Im pretty new to coding, heres my problem.
Results->Text = "G55 > Y" + System::Convert::ToString(destY);
"Results" is a System.Windows.Forms.Textbox "multiline btw", or so says VS.
That line works fine, but i need a "new line or CR" at the end, so that i can repeat that line with different Literals and a different var in ToString.
For days now ive tried different syntax's ive read about, and i cant get it to take any of them.
Or even a complete different way to input text into Results->Text that would allow for tidy multiline use.
Sidenote: since im using ->Text and System::Convert::ToString in VC, would this code be considered just c++ or .net or CLI? to tighten my searches.
Have you tried System::Environment::NewLine? This will give you CrLf on Windows and whatever is correct for Linux/OS X on those platforms.
Being completely unfamiliar with .NET, I could be completely wrong, but surely adding a + "\n" to the end of your line would do the job? Or failing that, a + "\r\n"?

Resources