2017-03-06 6 views
1

CoreBluetooth를 사용하는 명령 줄 응용 프로그램을 빌드하려고합니다. 문제는 명령 줄 앱에서 작동하지 않는다는 것입니다.Mac의 CoreBluetooth 명령 줄 응용 프로그램

나는 내 CoreBluetooth 코드 이동 한 - 다른 Mac OS GUI 응용 프로그램에 명령 줄 응용 프로그램 프로젝트에서합니다 (CBCentralManagerDelegate 프로토콜을 구현하는 클래스를의이 클래스 myBLEManager를 부르 자).

내가 ViewDidLoad()에서 몇 가지 테스트를 실행 - supersample을, 난 그냥 다음, 초기화에 CBCentralManager의 인스턴스를 생성 scanForPeripherals를 호출하는 myBLEManager을 초기화하기.

이것은 CLI 및 GUI 프로젝트에서 모두 수행하는 작업입니다. 차이점은 centralManagerDidUpdateState이 CLI 프로젝트에서 결코 호출되지 않는다는 것입니다. 하지만 GUI 맥 애플 리케이션에서 않습니다.

+0

이 명령 줄 도구가 실행 루프를 가지고 있습니까? – duskwuff

+0

@duskwuff, 그렇지 않습니다. 힌트를 주셔서 감사합니다. 나는 그것을 조사 할 것입니다. – kmn

+0

답변을 게시 하시겠습니까? 아니면 끝나야합니까? 최대 너 – kmn

답변

2

대부분의 Apple 프레임 워크의 콜백은 응용 프로그램의 주 실행 루프를 통해 전달됩니다. 명령 줄 도구에 실행 루프가 없으면이 방법으로 전송 된 콜백을받을 수 없습니다.

runloop이 없으면 프레임 워크가 콜백을 호출하는 유일한 방법은 다른 스레드에서 실행하는 것입니다. 다른 스레드에서 실행하면 예상치 못한 응용 프로그램에서 이상한 동작이 발생할 수 있습니다.

이 추가 충분한입니다 :

let runLoop = RunLoop.current 
let distantFuture = Date.distantFuture 
while running == true && runLoop.run(mode: RunLoopMode.defaultRunLoopMode, before: distantFuture) { 

} 
+0

메인 클래스와 myBLEManager 클래스에 대한보다 자세한 예제를 보여주기 위해 대답을 업데이트 할 수 있습니까? – angryip

+0

@angryip 프로그램을 작성하지 않았습니다. – duskwuff

+0

충분히 공정하게, 저자에게 연락을 드리겠습니다. – angryip