8000 Segmentation faults when using SwiftyJSON as a subproject · Issue #67 · SwiftyJSON/SwiftyJSON · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Segmentation faults when using SwiftyJSON as a subproject #67

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Noobish1 opened this issue Oct 9, 2014 · 42 comments
Closed

Segmentation faults when using SwiftyJSON as a subproject #67

Noobish1 opened this issue Oct 9, 2014 · 42 comments
Labels

Comments

@Noobish1
Copy link
Contributor
Noobish1 commented Oct 9, 2014

If you add SwiftyJSON by dragging in the SwiftyJSON.xcodeproj then linking the framework and add a class like the following:

import SwiftyJSON

class Object {
func method(json: JSON) {
}
}

You'll get a segmentation fault

@Noobish1 Noobish1 changed the title Segmentation faults when using SwiftyJSON as a subpri Segmentation faults when using SwiftyJSON as a subproject Oct 9, 2014
@drhr
Copy link
drhr commented Oct 13, 2014

I'm seeing this as well. I have two models in two separate files that are referencing the JSON type. If I try to add a third model class in a third file, I run into this compiler crash. But if I lump that third class into one of those first two files, everything's fine.

@drhr
Copy link
drhr commented Oct 13, 2014

Now when I try this on a brand new project, any reference to JSON causes the seg fault (in 6.0.1 and 6.1 beta 1 and beta 2).

@Noobish1
Copy link
Contributor Author

I'd suggest just importing SwiftyJSON.swift for now, that seemed work fine for me.

@drhr
Copy link
drhr commented Oct 13, 2014

That works for now 🍺

@LukeTangPL
Copy link
Member

I think it's a Xcode's bug.
How about this:

class Object {
     func method(json: SwiftyJSON.JSON) {
     }
}

@broglep-work
Copy link

I think we experience the same or a similar problem, we have include the Xcode project as dependency.

With Xcode Version 6.1 (6A1052d) the compilation fails with
Segmentation Fault: 11
[snip]

1.  While silgen emitConstructor SIL function @_TFVSC20NSJSONReadingOptionsCfMS_FT_S_ for 'init' at <invalid loc>

We could track it down to the SwiftJSON init method at https://github.com/SwiftyJSON/SwiftyJSON/blob/master/Source/SwiftyJSON.swift#L67-73

When we comment out that part, the segmentation fault does not happen.
Including SwiftJSON directly as swift file also seems to solve the problem. I also think its likely a Xcode bug, and we have filed a bugreport to apple

@jeeftor
Copy link
jeeftor commented Oct 28, 2014

I think i'm having similar issues

@edwellbrook
Copy link

I'm seeing this issue as well :(

@mwaterfall
Copy link

I'm experiencing this even when just importing the swift file

1.  While emitting IR SIL function @_TFFC7App20MUpdateOperation17processCachedDataFS0_FT_T_U_FT_T_ for expression at [/Users/mwaterfall/Projects/.../UpdateOperation.swift:420:25 - line:469:9] RangeText=...

Any fixes about?

@lhammond
Copy link
lhammond commented Nov 5, 2014

I am also having this issue

@adamszeptycki
Copy link

Now I have exactly the same issue, but as long as I use SwiftyJSON in file called Server.swift everything works fine. Even if I add another class in that file (doesn't matter if its pure Swift class or class that is subclass for NSObject) it still works. Did any file apple bug report (for my this is bug with compiler)?

@mwaterfall
Copy link

Ahh, this is frustrating! Totally unusable, even on Xcode 6.1.1 GM.

@dave-kong
Copy link

Same issue here. @broglep-koubachi 's suggestion is right on.

@oldPandaSPUR
Copy link

+1 same issue. copying the source file over to my project worked.

@kosicki123
Copy link

+1 same issue, copying the source file over the project didn't work for me. Tried all the solutions given in this post, none of them seems to fix the bug. Accepting suggestions!

@ghost
Copy link
ghost commented Nov 24, 2014

which files exactly are you adding to your project? because all I had to do was to add 2 files to my project go to Build Settings and make sure the Files are part of my project too. I remember I had to fix a small syntax issue which I really didn't understand why, I can't remember what exactly was but it was not complicated 15 mins top to fix it.

@kosicki123
Copy link

I tried adding all files (SwiftJSON.swift, Alamofire.swift and Alamofire-SwiftJSON.swift) to my project, tried to add all the xcodeproj dependencies, tried both at the same time, tried only Alamofire-SwiftJSON and the other 2 physically inside the project...all possible combinations...(also adding to link bynary with libraries)

@oldPandaSPUR
Copy link

Try to get Alamofire working properly on its own first, the instructions given on their github page are good. That way we can eliminate that as an issue, since I'm also using Alamofire and did not have to copy the source files over to my own project.

Then for SwiftyJSON, I followed the same instructions from Alamofire to setup SwiftyJSON as a submodule. Parts of it worked, but I got segfaults, so thats when I copied SwiftJSON.swift into my project.

8000
@ghost
Copy link
ghost commented Nov 24, 2014

hmm thats wierd. I didnt have to add anything about the alamofire. And nothing about adding Link binary. I just added SwiftyJson and some other one like if both files were '.swift files' created by me. tomorrow that I get at the office and see my project Ill check and get back here.

@kosicki123
Copy link

Also did this, first of all I got all running and tested with Alamofire, then the same with SwiftyJSON, then when I introduced the Alamofire-SwiftyJSON I made a callback like this, which gave me the error:
func requestLogin(credential: Credential, callback: (retorno: JSON?) -> ())

If I change it to "AnyObject?" it works without the SwiftJSON feature...which is what I want...

@yuhua-chen
Copy link

+1 the same issue. the most weird thing is if i add a part of code like this before:

// This is fucking workaround
Alamofire.request(.GET, "", parameters: nil).responseSwiftyJSON { (_, _, _, _) -> Void in 
}.cancel()

and the compiler works....

@Jeehut
Copy link
Jeehut commented Dec 2, 2014

When I had this issue it helped to just place println(".") at the end of the right method or closure and it worked fine. It really has to be a bug from Apple cause this is weird.

@ratkins
Copy link
ratkins commented Dec 2, 2014

+1 having this problem on Xcode Version 6.1.1 (6A2006). Manually importing SwiftyJSON and Alamofire-Swifty-JSON as a work-around.

@broglep-work
Copy link

I'd suggest that everybody that has the problem opens a bug report at apple (we have done so), you can reference this github issue in the bug report.
Then lets hope that multiple bug reports will increase the likelihood that this bug will be addressed soon.

@Isuru-Nanayakkara
Copy link

God, I'm eternally frustrated with Apple's developer tools. I'm getting this issue in Xcode 6.2 beta. Adding the .swift file resolved the issue. I'm going to file a bug report as well.

@kostiakoval
Copy link

+1 to File a Radar.

I use Alamofire + SwiftJson. I've tried everything and nothing worked work for me
So the quick fix that help me is comment out this peace of code in SwiftyJSON.swift file.

//    public init(data:NSData, options opt: NSJSONReadingOptions, error: NSErrorPointer) {
//        if let object: AnyObject = NSJSONSerialization.JSONObjectWithData(data, options: opt, error: error) {
//            self.init(object)
//        } else {
//            self.init(NSNull())
//        }
//    }

@danil-z
Copy link
danil-z commented Jan 9, 2015

@konstantinkoval thanks,
Your hack did the trick. With unit tests where main app goes as target decency importing SwiftyJSON as a file in main app won't help

@rustedivan
Copy link

Hi all,
I dug into this and have submitted a minimal repro case in PR to /practicalswift/swift-compiler-crashes. It seems the compiler crashes when it hits the default arguments (opt: NSJSONReadingOptions = .AllowFragments) in the JSON initialiser. When a initialization like that is optimised out, the compiler segfaults. It's definitely a bug in swiftc.

It only happens when SwiftyJSON is imported as a module, so you can use the .swift file directly in the meantime.
Another workaround is to make sure the call isn't optimised out (e.g. the .cancel() and println(".") workarounds above.

For SwiftyJSON library code, see if you can omit the default arguments for opt: and errorPointer: somehow. Sucks, but swiftc is still, um, a little wonky and this won't probably be fixed for some time.

@raphaelmor
Copy link

Hi all,
just a small note to say I use SwiftyJSON.swift directly in a Framework, and it builds fine, but it crashes when I run unit tests (seg fault 11 too). I guess it's because doing that Swifty gets in a module (even if it's not his own) and it is the same bug in swiftc.

@Blackjacx
Copy link

I have a segfault 11 too when I just include SwiftyJSON.swift in my project. It occurred suddenly after a small refactoring. Before everything was finde. So I think it has nothing to do with the subproject but with some strange swift compiler behaviour.

@endel
Copy link
endel commented Jan 18, 2015

Same issue here. I'm having a new surprise at each attempt to compile this.

When registering an Alamofire request callback, that's the compiler error I was receiving:

Command failed due to signal: Segmentation fault: 11

After tried what @yuhua-chen suggested, the problem changed, in a very surprising way:

Undefined symbols for architecture x86_64:
  "__TMdV10SwiftyJSON4JSON", referenced from:
      __TFFC7example14ViewController11viewDidLoadFS0_FT_T_U0_FV10SwiftyJSON4JSONT_ in ViewController.o
ld: symbol(s) not found for architecture x86_64

After removing the Alamofire callback, the program do compile, which doesn't help.

@rustedivan
Copy link

@endel: would you be able to share a gist of your crashing/non-crashing code? That sounds like a different segfault that I'd like to minimise and report against swiftc asap. Thanks.

@endel
Copy link
endel commented Jan 18, 2015

@rustedivan sure, here it is: https://gist.github.com/endel/6e2f9ac7279a6ee42b90

I've written 3 examples to demonstrate what is happening for me:

  1. Runs fine
  2. Segmentation fault
  3. Linker error

I'm using a custom Request class for this.

@rustedivan
Copy link

Excellent, thanks for putting in the effort with the different cases. Swift compiler crashes are collecting over at practicalswift/swift-compiler-crashes so these reports are golden.

@Blackjacx
Copy link

For me the following caused a segfault while type is an optional:

switch type {
    case .aType:
        // Do Something
    default:
        break
}

and this solved it:

switch type {
    case .Some(.aType):
        // Do Something
    default:
        break
}

@sman591
Copy link
sman591 commented Feb 7, 2015

@kostiakoval's workaround solved it for me. I pushed a copy of the changes to https://github.com/sman591/SwiftyJSON/tree/compiler-segfault-workaround in case anyone else wants to try it.

@jzarzuel
Copy link

Same here :-(
If you remove "options" parameter from init() and pass "AllowFragments" as default value to NSJSONSerialization (cannot be modified as removed as input parameter)... It works.

It's a shame that Apple had relased this faulty compiler (this is one of the many bugs it has)

@sferoze
Copy link
sferoze commented Feb 20, 2015

I just had this issue! It was hard to track down but essentially once I removed a function that included JSON object from SwiftyJSON class, it crashed my code with the segmentation fault.

So basically if I removed code from the project it crashed.

When I imported SwiftyJSON.swift into my project it started to work.

Here was the stack overflow I posted: http://stackoverflow.com/questions/28623405/why-can-i-not-remove-an-unused-function-from-my-swift-class

@broglep-work
Copy link

We got feedback from apple, they request to test it with Xcode 6.3 and the news swift 1.2 compiler. We still have to migrate our project, so we can't yet test it, so if someone else that has the problem could try it with Xcode 6.3 that would be great

@imanzarrabian
Copy link

@broglep-koubachi I had the exact same pb combining Alamofire and SwiftyJSON doing something like this

Alamofire.request(.GET, APIClientConstants.kApiBaseUrl + "/vls/v1/stations", parameters: params).responseJSON { (req, response, json, error) in
            if (error != nil) {
                completionHandler(APIResponseState.Error(error!))
            }
            else {
                var json = JSON(json!)
                completionHandler(APIResponseState.Correct(json))
            }
        }

It wouldn't compile under Xcode 6.1.1 and swift 1.1 but it works with swift 1.2 and Xcode 6.3 after manually updating Alamofire and SwiftyJSON to Swift 1.2 of course

imanzarrabian pushed a commit to imanzarrabian/SwiftyJSON that referenced this issue Feb 20, 2015
When using swift 1.1 and Xcode 6.1.1 with cocoaPods and embedded
frameworks : SwiftyJSON#67
@thekie
Copy link
Contributor
thekie commented Mar 22, 2015

+1 Removing the options parameter from init(data:options:error:) worked for me as well.

@Isuru-Nanayakkara
Copy link

This seems to be fixed in Xcode 6.3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

0