Reputation: 3192
Please note that this error message is pretty low level, so it crops up for different reasons in different scenarios. If you have a scenario that isn't mentioned in one of the answers below, please consider adding your situation as well, so maybe this could be a central answer for various situations that raise this error message.
Edit Nov 10, 2015 Also note, I marked my own answer as the answer, but that was before anyone else had posted. I guess none should really be marked as the answer, because as we've now seen below... this error doesn't have just one answer because it's so low level.
I'm running
Everything was working fine yesterday.
Today, after a bunch of work on rotation related stuff, I started getting this error in my console output when I run the app in the Simulator and I rotate it.
_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
- I've cleared my build folder,
- I've cleaned the derived data folder,
- I've reset the simulator.
I was working with
UIViewController viewWillLayoutSubviews
UIViewController viewWillTransitionToSize:...
I was also checking various 'Drawing' settings on the Attributes Inspector in IB.
I also made a utility category on UIView where I created a bunch of methods that create CGRect
's and helps me assign frames to views.
Upvotes: 174
Views: 94853
Reputation: 41
In my case the cause of the error was due to resizing. Built in IB. Anything that can change the size of a text field or similar for example changing line length can lead to this error I believe. In my case I simply had to adjust the text field size to cover all possibilities so it doesn't need to resize the box and conflict with something else.
Upvotes: 0
Reputation: 8674
I was getting the same errors...
_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
I was calling openURL() from a UIAlertAction
alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
UIApplication.shared.openURL(url)
}
Deferring execution of the block until the next run loop fixed it...
alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
OperationQueue.main.addOperation {UIApplication.shared.openURL(url)}
}
Upvotes: 12
Reputation: 33
with Xcode 8.1 and iOs 10 I also faced
_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
trying to override UiTraiCollection var to change at runtime the iPad’size classes to have two different interface layouts in Portraid and Landscape. It worked without any crash but generate our errors.
This was the "maliciuos" code:
override public var traitCollection: UITraitCollection {
if UIDevice.currentDevice().userInterfaceIdiom == .Pad && UIDevice.currentDevice().orientation.isPortrait.boolValue {
return UITraitCollection(traitsFromCollections:[UITraitCollection(horizontalSizeClass: .Compact), UITraitCollection(verticalSizeClass: .Regular)])
}
return super.traitCollection
}
The errors gone using override func viewWillTransition
as alternative to detect interface rotation.
I hope this will be useful to someone
Upvotes: 0
Reputation: 731
Since we can post all situations returning the same error here, I felt free to post mine :). I got the Error when I changed privacy settings in the background. My app opened the settings app so the user can grant it permission to its photolibrary, when the permission switch is set, the app crashes with the mensioned error:
_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
This appears to be a forced restart of your app by the OS, because the user changed what your app can acces. So in my case it is an action of the OS who caused the error.
Upvotes: 2
Reputation: 145
I got this error from:
var promptsArr = StartRegAlerts() //Instance of the class
etc
func textFieldDidBeginEditing(textField: UITextField) {
switch textField.tag {
case 0:
alert(promptsArr.prompts["Name"]!)
case 1:
alert(promptsArr.prompts["CellPhone"]!)
case 4:
alert2(promptsArr.prompts["NUMBERCORRECT"]!)
//alert(promptsArr.prompts["Wait4Pin"]!)
default: break
}
It only occurred for case 0 but not the other cases:
As a work around for now I commented out case 0 and that stopped the error.
I then changed calling promptsArr.prompts by:
creating a new dictionary prompt and:
override func viewDidAppear(animated: Bool) {
prompt = promptsArr.prompts //
}
and then used prompt in my alert calls. That fixed the problem.
So it appears that it is a timing issue.
Upvotes: 1
Reputation: 707
Changing localization string from en to United States fixed this for me. However, make sure you clean after you change Info.plist. I've noticed that updates don't work when you just build after making plist changes.
Upvotes: 3
Reputation: 727
The reason some developers doesn't get the error came back after changing from "Unites States" to "en" (or) other region, is that there is discrepancy between "Property list" and "Source code" views. It's probably Xcode bug. Whenever there is mismatch between these two views will throw this error, whatever it is "en" or "English". If you changed to "en" or "United States" for both views to be the same, will fix the issue.
Upvotes: 1
Reputation: 1953
I had the same error and none of the above applied to my problem. The problem appeared when I registered my view controller as an observer to a device orientation change, so the views could be resized and the drawings in the view could be made according to the new size of the view.
I had an outlet of a viewGraph which was a subclass of UIView in which I drew some graphics.In landscape mode the size of the viewGraph is larger than in portrait mode. So when the device changes its orientation the speedGraph needed to be redrawn.
The problem was, that I added several subviews to the speedGraph view, that contained graphics. These subviews needed to be laid out anew in the speedGraph view and then be redrawn. After the device changed its orientation I called viewDidAppear again to make the speedGraph view and all its subviews to be laid out anew and redraw themselves. Calling setNeedsDisplay for speedGraph doesn't work with orientation changes and subviews in a view.
What did I do wrong that caused the error to appear. In viewDidAppear I call a method which does some calculations and adds the subviews to the speedGraph view. The problem was that these subviews were created in the method and were added to the speedGraph view in this method. After leaving the method, the references to these subviews are, of course, deleted, but the subviews in the speedGraph view remain, since they are added. When the device changes, the subviews are created again and added to the speedGraph view, that already has these subviews, but can't find the references to these subviews anymore. The array of subviews of speedGraph view gets longer and longer with (i think) dangling subviews.
I solved the problem by defining the subviews that will be added to the speedGraph view as a class property and then do what needed to be done with the views inside this method. With this change the problem was gone.
Upvotes: 2
Reputation: 5550
This error started popping up after I added some observers:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillHideNotification, object: nil)
The problem went away when I specified the class name instead of self
:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.keyboardWillHideOrShow(_:)), name:UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.keyboardWillHideOrShow(_:)), name:UIKeyboardWillHideNotification, object: nil)
Upvotes: 2
Reputation: 1244
It's crazy but for me the solution was just to remove all breakpoints in the file where the error occured.
As for the cause? I think I accidentally hit a shortcut key to create a breakpoint in the current line. Because that was unintended I hit the same shortcut key again to delete it.
Oh my dear XCode...
Upvotes: 15
Reputation: 131
I am a newb at this so take this for what it is worth.
What fixed this for me was changing the Simulated Metrics > Size > to iPad Full Screen. All of my views EXCEPT for the one that threw this error we set to iPad Full Screen. When I changed it, the error went away...
Upvotes: 1
Reputation: 2124
Based on the https://forums.developer.apple.com/thread/15683:
Change "Localization native development region" in info.plist
to United States instead of en
.
Updated: Then you can revert these changes back.
Upvotes: 144
Reputation: 2126
I had this error when dismissing a popover via delegate. In the delegateMethod I triggered some GUI-Stuff. Putting the GUI-Stuff in the completionBlock of dismissViewControllerAnimated fixed it.
[myPopoverView dismissViewControllerAnimated:YES completion:^{ //GUI-Stuff}];
Upvotes: 1
Reputation: 393
I did face the same error invalid capability (20) & invalid name (15). I tried the solutions as mentioned by others such as:
But none of those solutions solved my problem. Actually, I was trying to share some document but generating document would take some time and wanted to display an UIActivityIndicatorView to the user till the time document loads.
The solution for my error was:
//Create a alertView add UIActivityIndicatorView to it and present it in ViewController
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
//Call method 1 todo background process like getting data
dispatch_sync(dispatch_get_main_queue(), ^{
//Call method 2 to update the UI
[alert dismissViewControllerAnimated:YES completion:^(void){
//My mistake was: I was calling method 2 over here to update the UI
return;
}];
});
});
Upvotes: 4
Reputation: 6806
I saw this when I pressed the Home
button while a UIAlertController
was displayed, which was dismissed when I relaunched the app. I added code to dismiss the UIAlertController
in the appDelegate
:
func applicationWillResignActive(application: UIApplication) {
window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
}
and the error message disappeared.
Upvotes: 1
Reputation: 4340
For what it's worth - it seems that a lot of situations throw this error. In my case, I had posted an alert when the user was dismissing a data entry form and data was in the form. I was able to eliminate the error by programmatically resigning the first responder from all applicable fields before unwinding the view controller.
Upvotes: 1
Reputation: 843
I also ran into the _BSMachError
console errors while deep linking into the Settings app on iOS 9 from a UIAlertController
action. A dispatch_async
solved my problem:
[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
});
}]];
Upvotes: 66
Reputation: 91
I was getting the following when supplying new data:
> _BSMachError: (os/kern) invalid capability (20)
> _BSMachError: (os/kern) invalid name (15)
The error occurred when a button was used to supply new data. An NSTimer
was used to refresh and update data upon returning from a performSegueWithIdentifier
action. The timer was being activated and then invalidated immediately after use at return time. The MSMachError
stopped when the timer was removed and - (void)viewWillAppear:(BOOL)animated
and (void)viewDidAppear:(BOOL)animated
were employed to perform the same function. This error started with upgrade to Xcode 7.
Upvotes: 9
Reputation: 36447
I got this issue fixed by changing value of Localization native development region
key to United Kingdom
[or any Specific region] from its default value en
present in info.plist
of your project.
Project Navigator
info.plist
file present in ProjectNameTests folder.Localization native development region key
to any specific region for eg. United KingdomUpvotes: 6
Reputation: 71
I also ran into the same problem in an NSOperation running on a background thread and I was still getting this error because a UIAlertController was still removing itself as another UI transaction was trying to take place. Modifying my code to this fixed the issue.
defer {
dispatch_async( dispatch_get_main_queue(),{
completion()
})
}
A lot of people don't know about defer -It lets the current scope complete and then runs after. Kinda neat.
Upvotes: 4
Reputation: 36
I could reproduce the error for me: If a make changes to one of the Views within a View that I am actually closing already (popViewControllerAnimated) I receive the error.
I am having a UINavigationButton action that makes an asynchronous task (POSTRequest). Before performing this request I set the customView of that button to an progress indicator. When coming back from the asynchronous call I dispatch to the main thread and reset the customView of that button. After that I am closing the view (popViewControllerAnimated).
This is the CORRECT code where the error does not appear:
/* right way, working without BSMachError */
@IBAction func sendRequest(sender: UIBarButtonItem) {
/* setting the progress indicator as customView of the self.saveButton */
self.showActivityIndicatory(self.saveButton)
/* asynchronous REST call */
UserDataManager.sharedInstance.requestFeedback(request, onCompletion: { error in
dispatch_async(dispatch_get_main_queue(),{
/* resetting the saveButton again to default by setting customView to nil */
self.saveButton.customView = nil
/* closing the view */
self.navigationController!.popViewControllerAnimated(true)
})
})
}
What caused the error was switching lines: closing the view and then setting the customView to nil:
/* WRONG way, causing BSMachError */
@IBAction func sendRequest(sender: UIBarButtonItem) {
/* setting the progress indicator as customView of the self.saveButton */
self.showActivityIndicatory(self.saveButton)
/* asynchronous REST call */
UserDataManager.sharedInstance.requestFeedback(request, onCompletion: { error in
dispatch_async(dispatch_get_main_queue(),{
/* closing the view */
self.navigationController!.popViewControllerAnimated(true)
/* resetting the saveButton again to default by setting customView to nil */
self.saveButton.customView = nil
})
})
}
Upvotes: 2
Reputation: 12122
In my case it was Little Snitch, it was blocking urls automatically.
Upvotes: 2
Reputation: 6882
I got the same error message, because I assign
a object
property like @property (assign, nonatomic) NSNumber *aVariable;
, fixed by changing to strong
.
Upvotes: 1
Reputation: 3192
Ok, I haven't pinned it down completely, but this will get you 99% of the way there. I'm using a third party map control from ESRI, and something about it doesn't like one of these drawing settings in the Attributes Inspector. I haven't tried each setting individually to see which setting it is, but when I turned all of them off (in the red box), everything worked like a charm, and I quit getting the error message above in the console. If and when I get time to nail it down to the precise setting or combination of settings, i'll update the answer.
Upvotes: 33