Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

_BSMachError while running Stanford's CS193p Smashtag app

Tags:

ios

swift

cs193p

I downloaded the Smasthag demo app from course's site. Project builds fine (after small changes in Twitter, TwitterRequest etc. classes, because I use the latest Xcode 7b4) and works fine on simulator (I also had to add NSAppTransportSecurity key to info.plist), but not on a device - it doesn't fetch tweets . I tested it on both iPhone 6 with iOS 9 Public Beta and iPad 2 with iOS 8.4. Moreover, when app is running in the simulator and I change hashtag to search, whole tableView reloads with new tweets, but in the console I get this:

2015-07-23 03:24:15.560 Smashtag[25991:4344251] _BSMachError: (os/kern) invalid capability (20)
2015-07-23 03:24:15.560 Smashtag[25991:4344251] _BSMachError: (os/kern) invalid name (15)

App still runs fine, but this error bugs me. I couldn't fine anything about this _BSMachError in google (just one lonely Indonesian tweet). I can't also get why app doesn't fetch tweets on a device.

like image 377
Sebastian Osiński Avatar asked Jul 23 '15 11:07

Sebastian Osiński


3 Answers

This seems to be an iOS 9 Beta bug. It definitely is related to presentation and dismissal of UIKeyboard (the system one). And, at that it doesn't happen all the time.

It's harmless, just annoying. The bug will probably be resolved in the next beta since its in a core system object.

like image 101
tokan_one Avatar answered Nov 07 '22 09:11

tokan_one


To fix this issue you should set locale to en_US.

Change the private extension asTwitterDate in Tweet.swift to the following to fix issue on non en_US devices.

...
private extension String {
  var asTwitterDate: NSDate? {
    get {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
        let createdAt = dateFormatter.dateFromString(self)
        return createdAt
    }
  }
}

After this your application should load and show all data correctly.

like image 37
CTiPKA Avatar answered Nov 07 '22 10:11

CTiPKA


You will need to add NSAppTransportSecurity as a dictionary and as the first child should be a bool named NSAllowsArbitraryLoads set to YES. Note that this opts out of NSAppTransportSecurity feature.

enter image description here

See the App Transport Security configuration notes here. Note that this documentation is brand new and has an error in it, if you want to opt out completely. The error is that the NSAllowsArbitraryLoads key isn't shown as a direct child of NSAppTransportSecurity.

Ideally what you should do is set the appropriate whitelisted domains and security settings.

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

like image 5
Joey Carson Avatar answered Nov 07 '22 10:11

Joey Carson