Skip to content
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

Mac OS X Catalina Beta 7 키보드 환경설정 에서 입력소스 란에 빈 화면이 표시 됩니다. #604

Open
happyjem opened this issue Sep 7, 2019 · 10 comments

Comments

@happyjem
Copy link

commented Sep 7, 2019

  • macOS 버전: Mac OS X 10.15 Catalina beta 7
  • 구름 버전: 1.10.1-31 debug 버전
  • 사용중인 한글 배열: 2벌식
  • 문제가 발생하는 애플리케이션 이름과 버전: 키보드 환경설정
  • 문제가 있는 동작: 키보드 환경설정 에 들어가서 입력 소스를 보면 빈 화면이 나타납니다.
  • 기대하는 정상 동작: 입력소스에 관한 옵션 화면이 보여야 합니다.
  • 애플 기본 한글 입력기의 동작: 입력소스에 관한 이미지와 옵션이 보입니다.
  • 재현 방법: 설치하면 바로 나타납니다.
@happyjem

This comment has been minimized.

Copy link
Author

commented Sep 7, 2019

제가 우선 원인을 확인해 보겠습니다.

@happyjem

This comment has been minimized.

Copy link
Author

commented Sep 8, 2019

구글에서 만든 일본어 입력기도 같은 현상이네요.
제가 참고한 입력기는 [https://www.google.co.jp/ime/] 입니다.
우선 testApp 에서 화면이 불러오지 않는 문제부터 수정하고 있습니다. 하지만 구름입력기에서 preferencePane 파일을 어떻게 키보드 입력소스 화면으로 들어가게 하는 과정이 잘 이해가 되질 않네요.
그리고, Preferences.prefane 파일을 Bundle로 처리할 때, NSPrefPaneBundle 를 사용하던데요, Bundle(path:~) 이렇게 사용해도 되지 않을 까요, NSPrefPaneBundle Function 은 Private API 같은데 이걸 써야 되는 이유가 있는지 궁금해지네요.

@youknowone

This comment has been minimized.

Copy link
Member

commented Sep 8, 2019

일본어 입력기 확인 감사합니다.

테스트 앱에서 NSPrefPaneBundle을 쓴건, 애플이 해당 API를 갖고 preferences 번들을 불러서 환경설정에 표시하기 때문에 재현을 위해 똑같이 만들어 둔 것입니다. 어디까지나 구름 설치 후 preference를 불러주는건 macOS의 키보드 환경설정이지 테스트 앱이 아니니까, 키보드 환경설정이 private api를 부르고 있으면 우리도 같은 api를 불러서 테스트해야 하는 것이지요.

혹시 실제 환경설정이 부르는 api가 바뀌었으면 테스트 앱도 바꾸어야 하겠습니다.
mojave에서 확인한 동작은 시스템 환경설정 어딘가에서 NSPrefPaneBundle (private class)가 -initWithPath: 에 우리가 빌드해 만든 prefPane을 읽어 오는 것이었습니다. 혹시 동작이 바뀐 것 같으면 공유 부탁드려요

@happyjem

This comment has been minimized.

Copy link
Author

commented Sep 11, 2019

오늘 올라온 Catalina Beta 8 에서도 동일한 현상이 나타남을 확인헀습니다.
구름 입력기 버전은 1.10.1 입니다.

@youknowone

This comment has been minimized.

Copy link
Member

commented Sep 11, 2019

catalina에서 크래시 리포트 복사해서 올려주실 수 있나요? 아마 아주 어려운 문제는 아닐듯 싶은데, 제 catalina 장비엔 xcode 셋업이 잘 안되네요

@happyjem

This comment has been minimized.

Copy link
Author

commented Sep 11, 2019

저도 지금 Xcode 를 다시 설치 하고 있어서요 T.T

@happyjem

This comment has been minimized.

Copy link
Author

commented Sep 11, 2019

설치가 완료되면 시간 나는 대로 찾아서 올려 볼께요.

@happyjem

This comment has been minimized.

Copy link
Author

commented Sep 12, 2019

Xcode 11 GM 을 설치 후 다음과 같은 오류로 빌드를 못하고 있습니다.

CodeSign /Users/happyjem/Library/Developer/Xcode/DerivedData/Gureum-bssppjwkhtyexrcuealylwisqnmz/Build/Products/Debug/Gureum.app/Contents/Resources/Preferences.prefPane (in target 'OSX' from project 'Gureum')
    cd /Users/happyjem/Documents/Devsource/gureum
    export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
    
Signing Identity:     "-"

    /usr/bin/codesign --force --sign - -o runtime --timestamp=none --preserve-metadata=identifier,entitlements,flags /Users/happyjem/Library/Developer/Xcode/DerivedData/Gureum-bssppjwkhtyexrcuealylwisqnmz/Build/Products/Debug/Gureum.app/Contents/Resources/Preferences.prefPane

그래서 TestProject 에서 나오는 로그만 우선 올려봅니다.

2019-09-12 12:38:43.388942+0900 OSXTestApp[6175:71255] ### connection interrupted (org.youknowone.inputmethod.Korean.Preferences)
2019-09-12 12:38:43.399681+0900 OSXTestApp[6175:70856] ### advanceToConfigPhaseIfNeeded error :Error Domain=com.apple.ViewBridge Code=14 "(null)" UserInfo={com.apple.ViewBridge.error.hint={
    callStackSymbols =     (
        "0   CoreFoundation                      __exceptionPreprocess + 250",
        "1   libobjc.A.dylib                     objc_exception_throw + 48",
        "2   CoreFoundation                      +[NSException raise:format:arguments:] + 88",
        "3   Foundation                          -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 191",
        "4   ViewBridge                          -[NSViewServiceMarshal _bootstrap:replyData:completion:] + 3402",
        "5   ViewBridge                          -[NSViewServiceMarshal bootstrap:withReply:] + 380",
        "6   CoreFoundation                      __invoking___ + 140",
        "7   CoreFoundation                      -[NSInvocation invoke] + 305",
        "8   CoreFoundation                      -[NSInvocation invokeWithTarget:] + 70",
        "9   ViewBridge                          -[NSVB_ViewServiceImplicitAnimationDecodingProxy forwardInvocation:] + 85",
        "10  CoreFoundation                      ___forwarding___ + 829",
        "11  CoreFoundation                      _CF_forwarding_prep_0 + 120",
        "12  CoreFoundation                      __invoking___ + 140",
        "13  CoreFoundation                      -[NSInvocation invoke] + 305",
        "14  CoreFoundation                      -[NSInvocation invokeWithTarget:] + 70",
        "15  ViewBridge                          -[NSVB_QueueingProxy forwardInvocation:] + 321",
        "16  CoreFoundation                      ___forwarding___ + 829",
        "17  CoreFoundation                      _CF_forwarding_prep_0 + 120",
        "18  CoreFoundation                      __invoking___ + 140",
        "19  CoreFoundation                      -[NSInvocation invoke] + 305",
        "20  CoreFoundation                      -[NSInvocation invokeWithTarget:] + 70",
        "21  CoreFoundation                      ___forwarding___ + 829",
        "22  CoreFoundation                      _CF_forwarding_prep_0 + 120",
        "23  CoreFoundation                      __invoking___ + 140",
        "24  CoreFoundation                      -[NSInvocation invoke] + 305",
        "25  ViewBridge                          __deferNSXPCInvocationOntoMainThread_block_invoke + 228",
        "26  ViewBridge                          __wrapBlockWithVoucher_block_invoke + 37",
        "27  ViewBridge                          __deferBlockOntoMainThread_block_invoke_2 + 507",
        "28  CoreFoundation                      __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12",
        "29  CoreFoundation                      __CFRunLoopDoBlocks + 386",
        "30  CoreFoundation                      __CFRunLoopRun + 2806",
        "31  CoreFoundation                      CFRunLoopRunSpecific + 503",
        "32  HIToolbox                           RunCurrentEventLoopInMode + 292",
        "33  HIToolbox                           ReceiveNextEventCommon + 600",
        "34  HIToolbox                           _BlockUntilNextEventMatchingListInModeWithFilter + 64",
        "35  AppKit                              _DPSNextEvent + 990",
        "36  AppKit                              -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1352",
        "37  ViewBridge                          -[NSViewServiceApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 95",
        "38  AppKit                              -[NSApplication run] + 658",
        "39  AppKit                              NSApplicationMain + 777",
        "40  libxpc.dylib                        _xpc_objc_main.cold.3 + 56",
        "41  libxpc.dylib                        _xpc_objc_main + 609",
        "42  libxpc.dylib                        _xpc_copy_xpcservice_dictionary + 0",
        "43  ViewBridge                          xpc_connection_handler + 0",
        "44  ViewBridge                          NSViewServiceApplicationMain + 4204",
        "45  PreferencePanes                     PreferencePaneMain + 179",
        "46  legacyLoader                        main + 40",
        "47  libdyld.dylib                       start + 1"
    );
    name = NSInternalInconsistencyException;
    reason = "<NSViewServiceMarshal: 0x7fc4a3506c90 <NSLegacyPrefRemoteViewService: 0x6000011b8be0 <(null): 0x0>>> was unable to obtain a view; the -setView: method of <NSLegacyPrefRemoteViewService: 0x6000011b8be0 <(null): 0x0>> was invoked 0 times and the most recent parameter was nil";
}, com.apple.ViewBridge.error.description=NSViewBridgeServiceBootstrapError}

궁금한게 두가지가 있는데요, 구름입력기는 ~/Library/Input Methods 밑에 설치 되는게 아니라 바로 /Library/Input Methods 에 들어가는데, 이렇게 인스톨 위치를 System Library를 사용하는 이유가 있는 건가요?
Preference 에 있는 UI 가 표시 되지 않아도 입력기가 종료되는 것은 아닌것 같은데, 크래쉬 리포트를 어디서 찾을수 있는 건지요?

@happyjem

This comment has been minimized.

Copy link
Author

commented Sep 12, 2019

텍스트 포멧을 수정해준신 yous님 감사드려요. ^ ^;
저도 "```" 처음 배우네요.

@youknowone

This comment has been minimized.

Copy link
Member

commented Sep 17, 2019

답이 늦어서 죄송합니다. 환경설정의 크래쉬 리포트는 Console.app에서 시스템 크래시에 들어가 있을것 같습니다. 테스트 앱과 같은 이슈로 죽는지 확인하면 좋을것 같네요.

설치 경로는 인스톨러 제작 편의상 루트 라이브러리에 설치하고 있어요. 시스템 입력기는 /System/Libaray/Input Methods에 설치되니, /Library/Input Methods도 서드파티 입력기를 설치하기 위해 있는 공간이긴 하거든요. 디버그에 필요하시면 다른데 깔아서 테스트 하셔도 상관 없을것 같네요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.