오류 메시지 '_BSMachError : (os / kern) 유효하지 않은 기능 (20)'


173

이 오류 메시지는 매우 낮은 수준이므로 시나리오에 따라 다른 이유로 잘립니다. 아래 답변 중 하나에 언급되지 않은 시나리오가있는 경우 상황을 추가하는 것도 고려하십시오. 따라서이 오류 메시지를 발생시키는 다양한 상황에 대한 중심 답변 일 수 있습니다.

2015 년 11 월 10 일 편집 또한 내 답변을 답변으로 표시했지만 다른 사람이 게시하기 전에 수행했습니다. 우리가 지금 아래에서 볼 수 있듯이 아무것도 대답으로 표시되어서는 안된다고 생각합니다 ...이 오류는 레벨이 낮아서 단 하나의 대답 만하지 않습니다.

나는 뛰고있어

  • iOS 9.0 시뮬레이터
  • XCode 7.0

어제 모든 것이 잘 작동했습니다.

오늘날 회전 관련 항목에 대한 많은 작업을 한 후에 시뮬레이터에서 앱을 실행하고 회전 할 때 콘솔 출력 에서이 오류가 발생하기 시작했습니다.

_BSMachError : (OS / Kern) 유효하지 않은 기능 (20)

_BSMachError : (os / kern) 잘못된 이름 (15)

이 문제의 스크린 샷 -빌드 폴더를 지 웠습니다.-파생 데이터 폴더를 정리했습니다.-시뮬레이터를 재설정했습니다.

나는 함께 일하고 있었다

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

또한 IB의 속성 관리자에서 다양한 '도면'설정을 확인하고있었습니다.

또한 UIView에서 유틸리티 카테고리를 만들었습니다. 여기서를 작성 CGRect하고 뷰에 프레임을 할당하는 데 도움 이되는 많은 메소드를 만들었습니다 .

루트 뷰 컨트롤러

루트 뷰 컨트롤러 설정


BLE 작업 중에이 오류가 발생합니다
Nex Mishra

1
아직 솔루션을 찾을 수 없으며 회전하는 동안 솔루션을 얻습니다. Xcode에서 적은 양의 메모리 만 사용한다고보고하더라도 때때로 메모리 경고가 발생합니다. 실망.
narco

79
좋은 당신이 편집 됨 생각 MyFoodTracker: P
샘 Soffes

8
스크린 샷에서 MyFoodTracker가 빨간색 선으로 표시되는 이유는 무엇입니까?
Marián Černý

2
@LogicsaurusRex "무엇을 의미합니까?" 실제로 유용한 질문은 아니지만 "수정이 필요합니까?" 아마도 더 좋은 질문 일 것입니다 (답을 원합니다). 내 앱이 정상적으로 작동하는 것 같지만이 오류가 표시됩니다. 나는 그것을 고정시키고 고치고 싶지만 이것은 작은 응용 프로그램이 아니며 그것을 찾는 데 귀중한 시간이 걸릴 것입니다.
vrwim

답변:


144

https://forums.developer.apple.com/thread/15683 기반으로 :

대신 " Localization native development region " info.plist을 미국으로 변경하십시오 en.

업데이트 : 그런 다음 이러한 변경 사항을 되돌릴 수 있습니다.


3
그것은 나를 위해 일했다. 그런 다음 설정을 "en"으로 되돌리고 오류가 다시 나타나지 않는 것 같습니다.
Skoua

이 오류가 발생하는 새로운 인스턴스로 저에게 효과적이었습니다. 원본 게시물을 여기에 게시했는데 도면 확인란 중 하나 때문에이 오류가 발생했습니다. 오랜 시간이 지났고 이제는 다른 알려지지 않은 이유로 다시 자르기 시작했고 이것을 바꾸는 것이 실제로 고쳐졌습니다. HOLY COW 굉장합니다.
Logicsaurus Rex

광산이 ja아닌 로 설정되어 en있습니다. 어떻게해야합니까? Japan?로 설정하십시오 .
Nicolas Miari

1
이것은 효과가 있었다. 그러나 다시 en으로 되 돌렸고 오류가 없습니다 😒
Neo Ighodaro

30
나는 이런 대답을 정말로 좋아하지 않는다. 아무것도 설명하지 않기 때문입니다. XCode의 버그입니까? 코드 위치가 잘못 되었습니까? 또는 무엇을?
GeneCode

66

나는 또한 우연히 _BSMachError콘솔 오류 A로부터 아이폰 OS 9에서 설정 앱으로 딥 링크하는 동안 UIAlertController작업입니다. A는 dispatch_async내 문제를 해결 :

[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    });
}]];

2
이것은 나를 위해 콘솔 오류를 제거하지만, 동시에 발생 내가 해결하기 위해 노력하고 주요 유치장 버그는 도움이되지 않았다
제이슨

아마도이 답변을 일반화 할 수 있습니다 .uialertcontroller (거의 동일한 코드)에서 segue를 수행하는 동안 광산을 얻었습니다. 아마도 경보 컨트롤러가 그림에서 벗어나는 방법과 관련이 있습니다. dispatch_async로 내 문제를 해결했습니다.
user3802077

여기 동일한 문제-특히 UIAlertController 내에서 UIAlertAction 처리기를 통해 내 응용 프로그램 내에서 시스템 설정으로 이동할 때 9.2 시뮬레이터에서 발생합니다. 이전 UIAlertView 대신 UIAlertController에 코드를 다시 작성할 때 시뮬레이션에서 동일한 _BSMach 오류 (15,20)가 발생했습니다. 실제 장치 (ipad)에서 발생하지 않았습니다. Dispatch_async는 시뮬레이터를 행복하게 만들었습니다. UIAlertController와 관련이 있습니다.
Mike Kogan

같은 문제는 다시 머리를 키 웠습니다. 이번에는 시뮬레이션이 아니라 ipad와 시뮬레이션이 아닙니다. 이번에는 macherrors를 일으킨 pdf 컨텍스트로 뷰를 렌더링하는 코드였습니다. 다시 dispatch_async가 수정했습니다. 또한이 코드가 UIAlertController에있는 UIAlertAction의 완료 핸들러에서 호출되지 않고 실행될 때이 오류가 발생하지 않음을 확인했습니다. 두 경우 모두 오류는 XCode 디버그 콘솔에서만 볼 수 있었고 앱은 계속 올바르게 실행되었습니다. 이 글에서 제안 된 현지화 아이디어는 어느 시나리오에도 영향을 미치지 않았습니다.
Mike Kogan

@Jason 같은 문제가 발생하여 콘솔 오류 메시지를 제거했지만 여전히 충돌합니다. 어떻게 든 그것을 해결 했습니까?
bp14

32

좋아, 나는 그것을 완전히 고정 시키지는 않았지만, 이것이 99 %의 방법을 얻을 것이다. ESRI의 타사 맵 컨트롤을 사용하고 있는데 속성 관리자의 이러한 도면 설정 중 하나가 마음에 들지 않습니다. 어떤 설정인지 확인하기 위해 각 설정을 개별적으로 시도하지는 않았지만 (빨간색 상자에서) 모든 설정을 끄면 모든 것이 매력처럼 작동하여 콘솔에서 위의 오류 메시지가 표시되지 않습니다. 정확한 설정이나 설정 조합으로 시간을 정할 때 답을 업데이트하겠습니다.

여기에 이미지 설명을 입력하십시오


나는 당신의 대답이 꽤 좋다고 생각합니다. 그러나 상단에서 굵은 글씨를 제거했습니다. 최근에 많은 익명의 답변이 생겼습니다. 개인적으로 의심 스럽습니다.
Jason D

이 중 하나를 사용해야한다면 어떻게해야합니까?
Zaraki

15

미친 짓이지만 해결책은 오류가 발생한 파일의 모든 중단 점을 제거하는 것이 었습니다.

원인은? 현재 줄에 중단 점을 만들기 위해 실수로 바로 가기 키를 쳤다고 생각합니다. 의도하지 않았기 때문에 동일한 바로 가기 키를 다시 눌러 삭제했습니다.

오 내 사랑 XCode ...


이것은 나를 위해 일했습니다. 이것이 문제라는 한 가지 단서는 Xcode가 중단 점이없는 행에서 중단된다는 것입니다. 그런 다음 다른 줄에서 위의 _BSMachErrors를 얻었습니다.
didge

12

같은 오류가 발생했습니다 ...

_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)

에서 openURL ()을 호출했습니다. UIAlertAction

alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
    UIApplication.shared.openURL(url)
 }

다음 실행 루프가 수정 될 때까지 블록 실행 지연 ...

alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
    OperationQueue.main.addOperation {UIApplication.shared.openURL(url)}
 }

9

새 데이터를 제공 할 때 다음을 얻었습니다.

> _BSMachError: (os/kern) invalid capability (20)
> _BSMachError: (os/kern) invalid name (15)

버튼을 사용하여 새 데이터를 제공 할 때 오류가 발생했습니다. NSTimerperformSegueWithIdentifier작업 에서 돌아올 때 데이터를 새로 고치고 업데이트 하는 데 사용되었습니다 . 타이머가 활성화 된 후 반환 시간에 사용한 직후에 무효화되었습니다. 는 MSMachError타이머가 제거 될 때 중단하고 - (void)viewWillAppear:(BOOL)animated(void)viewDidAppear:(BOOL)animated동일한 기능을 수행하는 데 사용 하였다. 이 오류는 Xcode 7로 업그레이드하면서 시작되었습니다.


6

나는 값 변경하여 고정이 문제를 가지고 Localization native development region열쇠 United Kingdom [또는 특정 지역] 기본 값의 en존재를 info.plist프로젝트의합니다.

  1. 고르다 Project Navigator
  2. info.plistProjectNameTests 폴더에있는 파일을 찾으십시오 .
  3. 예를 들어Localization native development region key 특정 지역의 값을 변경하십시오 . 영국

1 단계와 2 단계

3 단계


예,이 수정은 미치게 들리지만 작동합니다. 저에게이 앱은 Xcode 7.3.1이 테 더링 된 iPod touch 5 세대에 배포되었을 때 작동했습니다. 그러나 Xcode에서 테 더링 된 iPad Air에 처음 배포 할 때이 문제가 발생했습니다 BSMachError. United States오류 를 해결하기 위해 영역을 전환했습니다 . 또 다른 설명 할 수없는 Xcode 수수께끼.
Basil Bourque

4

또한 백그라운드 스레드에서 실행되는 NSOperation에서 동일한 문제가 발생했으며 다른 UI 트랜잭션이 발생하려고 할 때 UIAlertController가 여전히 자체를 제거하기 때문에이 오류가 계속 발생했습니다. 내 코드를 수정하면 문제가 해결되었습니다.

defer { 
    dispatch_async( dispatch_get_main_queue(),{
        completion()
    }) 
}

많은 사람들이 연기에 대해 알지 못합니다. 현재 범위를 완료 한 다음 실행합니다. 깔끔하다.


4

동일한 오류 유효하지 않은 기능 (20) 및 유효하지 않은 이름 (15)에 직면했습니다. 나는 다음과 같은 다른 사람들이 언급 한대로 해결책을 시도했다.

  • info.plist의 현지화 기본 개발 영역 키
  • 속성 관리자에서 도면 설정 변경
  • info.plist에서 변경된 ATS 예외 사전

그러나 그 해결책 중 어느 것도 내 문제를 해결하지 못했습니다. 실제로 일부 문서를 공유하려고했지만 문서를 생성하는 데 약간의 시간이 걸리고 문서가로드 될 때까지 UIActivityIndicatorView를 사용자에게 표시하려고했습니다.

내 오류에 대한 해결책은 다음과 같습니다.

//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;
    }];
});
});

훌륭합니다, 저를 위해 일했습니다! UI 업데이트는 dispatch_get_main_queue ()에서 수행되어야합니다.
MkaysWork

3

현지화 문자열을 en에서 미국으로 변경하면이 문제가 해결되었습니다. 그러나 Info.plist를 변경 한 후에는 청소하십시오. plist 변경 후 그냥 빌드하면 업데이트가 작동하지 않는 것으로 나타났습니다.여기에 이미지 설명을 입력하십시오



2

나는 나를 위해 오류를 재현 할 수 있습니다. 실제로 이미 닫혀있는 뷰 내의 뷰 중 하나를 변경하면 (popViewControllerAnimated) 오류가 발생합니다.

비동기 작업 (POSTRequest)을 만드는 UINavigationButton 작업이 있습니다. 이 요청을 수행하기 전에 해당 버튼의 customView를 진행 표시기로 설정했습니다. 비동기 호출에서 돌아올 때 주 스레드로 디스패치하고 해당 버튼의 customView를 재설정합니다. 그 후보기를 닫고 있습니다 (popViewControllerAnimated).

오류가 나타나지 않는 올바른 코드입니다.

/* 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)
      })
    })
}

오류를 일으키는 원인은 줄을 바꾸는 것입니다.보기를 닫은 다음 customView를 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
      })
    })
}

2

이 오류는 관찰자를 추가 한 후에 나타납니다.

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillShowNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillHideNotification, object: nil)

클래스 이름을 대신 지정하면 문제가 사라졌습니다 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)

2

나는 같은 오류가 있었고 위의 어느 것도 내 문제에 적용되지 않았다. 뷰 방향을 장치 방향 변경에 대한 관찰자로 등록 할 때 문제가 발생하여 뷰의 크기를 조정하고 뷰의 새 크기에 따라 뷰의 도면을 만들 수있었습니다.

일부 그래픽을 그린 UIView의 하위 클래스 인 viewGraph의 콘센트가 있습니다. 가로 모드에서 viewGraph의 크기는 세로 모드보다 큽니다. 따라서 장치의 방향이 바뀌면 speedGraph를 다시 그려야합니다.

문제는 그래픽이 포함 된 여러 하위보기를 speedGraph보기에 추가했다는 것입니다. 이 하위 뷰는 speedGraph 뷰에서 새로 배치 한 다음 다시 그려야했습니다. 장치가 방향을 변경 한 후 다시 viewDidAppear를 호출하여 speedGraph보기 및 모든 하위보기를 새로 작성하고 다시 그립니다. speedGraph에 대해 setNeedsDisplay를 호출하면 뷰의 방향 변경 및 하위 뷰에서 작동하지 않습니다.

내가 잘못한 것은 오류가 나타나는 원인이었습니다. viewDidAppear에서 일부 계산을 수행하고 하위 뷰를 speedGraph 뷰에 추가하는 메소드를 호출합니다. 문제는이 서브 뷰가 메소드에서 작성되어이 메소드의 speedGraph보기에 추가되었다는 것입니다. 메소드를 떠난 후 이러한 서브 뷰에 대한 참조는 물론 삭제되지만 speedGraph 뷰의 서브 뷰는 추가되었으므로 그대로 남아 있습니다. 디바이스가 변경되면 서브 뷰가 다시 작성되어 이미 이러한 서브 뷰가 있지만이 서브 뷰에 대한 참조를 찾을 수없는 speedGraph보기에 추가됩니다. 속도 그래프 뷰의 하위 뷰 배열은 매달려있는 하위 뷰로 점점 길어집니다.

speedGraph 뷰에 클래스 속성으로 추가 될 서브 뷰를 정의한 다음이 메소드 내부의 뷰로 수행해야 할 작업을 정의하여 문제를 해결했습니다. 이 변경으로 문제가 사라졌습니다.


2

우리는 여기에 같은 오류를 반환하는 모든 상황을 게시 할 수 있기 때문에 자유롭게 게시 할 수 있습니다 :). 백그라운드에서 개인 정보 보호 설정을 변경하면 오류가 발생했습니다. 내 응용 프로그램은 설정 응용 프로그램을 열어 사용자가 사진 라이브러리에 권한을 부여 할 수 있습니다. 권한 스위치가 설정되면 응용 프로그램이 mensioned 오류와 충돌합니다.

_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)

사용자가 앱이 액세스 할 수있는 항목을 변경했기 때문에 OS에서 앱을 강제로 다시 시작한 것으로 보입니다. 그래서 제 경우에는 오류를 일으킨 OS의 행동입니다.


나도 이것을 얻었다. 따라서 이것은 실제로 버그가 아닙니다. 앱이 Xcode에 연결되어 있지 않으면 무서운 일이 발생하지 않습니다. 고마워 친구 디버깅 시간을 절약 할 수 있습니다.
yuji

1

저도 같은 오류 메시지가, 나 때문에 가지고 같은 특성 으로 변경하여 고정을 .assignobject@property (assign, nonatomic) NSNumber *aVariable;strong


1

가치있는 것에 대해-많은 상황 에서이 오류가 발생하는 것 같습니다. 필자의 경우 사용자가 데이터 입력 양식을 닫고 데이터가 양식에있을 때 경고를 게시했습니다. 뷰 컨트롤러를 풀기 전에 모든 해당 필드에서 첫 번째 응답자를 프로그래밍 방식으로 사임하여 오류를 제거 할 수있었습니다.


이것은 내가 가지고있는 문제이지만 탐색 컨트롤러의 탐색 표시 줄에서 뒤로 버튼으로보기 컨트롤러가 닫히지 prepareForSegue()않아 호출되지 않으며 첫 번째 응답자를 사임 할 곳을 모르겠습니다.
TimSim

1

Homea UIAlertController가 표시된 상태에서 버튼을 눌렀을 때 이것을 보았습니다 . 앱을 다시 시작했을 때 해제되었습니다. UIAlertController에서를 해제하는 코드를 추가 했습니다 appDelegate.

func applicationWillResignActive(application: UIApplication) {
  window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
}

오류 메시지가 사라졌습니다.


1

대리인을 통해 팝 오버를 해제 할 때이 오류가 발생했습니다. delegateMethod에서 GUI-Stuff를 트리거했습니다. dismissViewControllerAnimated의 completeBlock에 GUI-Stuff를 넣는 것이 수정되었습니다.

[myPopoverView dismissViewControllerAnimated:YES completion:^{ //GUI-Stuff}];

1

나는 이것에 익숙하지 않으므로 가치가있는 것을 위해 이것을 가져 가라.

나를 위해 이것을 고친 것은 Simulated Metrics> Size>를 iPad Full Screen으로 변경하는 것이 었습니다. 이 오류가 발생한 부분을 제외한 모든 견해는 iPad Full Screen으로 설정했습니다. 변경하면 오류가 사라졌습니다 ...


1

일부 개발자가 "Unites States"에서 "en"(또는) 다른 지역으로 변경 한 후에 오류가 발생하지 않는 이유는 "Property list"와 "Source code"보기간에 불일치가 있기 때문입니다. 아마도 Xcode 버그 일 것입니다. 이 두보기 사이에 불일치가있을 때마다 "en"또는 "English"에 관계없이이 오류가 발생합니다. 두보기가 동일하도록 "en"또는 "United States"로 변경 한 경우 문제가 해결됩니다.


1

이 오류가 발생했습니다 :

var promptsArr =  StartRegAlerts() //Instance of the class

기타

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:

새 사전 프롬프트 작성 및

 override func viewDidAppear(animated: Bool) {
             prompt = promptsArr.prompts //
      }

그런 다음 경고 호출에서 프롬프트를 사용했습니다. 문제가 해결되었습니다.

타이밍 문제인 것 같습니다.


잠시 동안 만 작동 한 다음 다시 나타납니다. 사례 1을 주석으로 처리 한 다음 나중에 해당 경고를 호출하면 문제가 해결 된 것으로 보입니다.
Jeremy Jeremy

0

Xcode 8.1 및 iOs 10에서도

_BSMachError : (OS / Kern) 유효하지 않은 기능 (20)

_BSMachError : (os / kern) 잘못된 이름 (15)

UiTraiCollection var를 재정 의하여 런타임시 iPad의 크기 클래스를 변경하여 Portraid 및 Landscape에서 두 가지 다른 인터페이스 레이아웃을 갖습니다. 충돌없이 작동했지만 오류가 발생합니다.

이것은 "maliciuos"코드입니다.

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
}

override func viewWillTransition인터페이스 회전을 감지하기위한 대안으로 오류가 사라졌습니다 .

나는 이것이 누군가에게 도움이되기를 바랍니다.


0

제 경우에는 오류의 원인이 크기 조정 때문이었습니다. IB에 내장. 텍스트 필드의 크기를 변경할 수 있거나 줄 길이를 변경하는 것과 같은 것이 있으면이 오류가 발생할 수 있습니다. 필자의 경우 모든 가능성을 포괄하도록 텍스트 필드 크기를 조정해야하므로 상자 크기를 조정할 필요가 없으며 다른 것과 충돌 할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.