내 응용 프로그램은 글로벌 서비스를 제공합니다. 나는 command-alt-key 조합으로 서비스를 설치하고 싶다. 내가 지금 할 것은 정말 무슨 일이 일어나고 있는지 볼 수 없습니다로 디버깅하는 것은 매우 오류가 아닙니다 경향이 정말 어렵다 :Command Alt 키를 사용하여 NSService 등록 NSKEEquivalent
CFStringRef serviceStatusName = (CFStringRef)[NSString stringWithFormat:@"%@ - %@ - %@", appIdentifier, appName, methodNameForService];
CFStringRef serviceStatusRoot = CFSTR("NSServicesStatus");
CFPropertyListRef pbsAllServices = (CFPropertyListRef) CFMakeCollectable (CFPreferencesCopyAppValue(serviceStatusRoot, CFSTR("pbs")));
// the user did not configure any custom services
BOOL otherServicesDefined = pbsAllServices != NULL;
BOOL ourServiceDefined = NO;
if (otherServicesDefined) {
ourServiceDefined = NULL != CFDictionaryGetValue((CFDictionaryRef)pbsAllServices, serviceStatusName);
}
NSUpdateDynamicServices();
NSMutableDictionary *pbsAllServicesNew = nil;
if (otherServicesDefined) {
pbsAllServicesNew = [NSMutableDictionary dictionaryWithDictionary:(NSDictionary*)pbsAllServices];
} else {
pbsAllServicesNew = [NSMutableDictionary dictionaryWithCapacity:1];
}
NSDictionary *serviceStatus = [NSDictionary dictionaryWithObjectsAndKeys:
(id)kCFBooleanTrue, @"enabled_context_menu",
(id)kCFBooleanTrue, @"enabled_services_menu",
@"@~r", @"key_equivalent", nil];
[pbsAllServicesNew setObject:serviceStatus forKey:(NSString*)serviceStatusName];
CFPreferencesSetAppValue (
serviceStatusRoot,
(CFPropertyListRef) pbsAllServicesNew,
CFSTR("pbs"));
Boolean result = CFPreferencesAppSynchronize(CFSTR("pbs"));
if (result) {
NSUpdateDynamicServices();
JLog(@"successfully installed our alt-command-R service");
} else {
ALog(@"couldn't install our alt-command-R service");
}
하고 서비스를 변경하려면 :
inside Info.plist:
<key>NSServices</key>
<array>
<dict>
<key>NSSendTypes</key>
<array>
<string></string>
</array>
<key>NSReturnTypes</key>
<array>
<string></string>
</array>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Go To Window in ${PRODUCT_NAME}</string>
</dict>
<key>NSMessage</key>
<string>bringZFToForegroundZoomOut</string>
<key>NSPortName</key>
<string>com.raskinformac.${PRODUCT_NAME:identifier}</string>
</dict>
</array>
및 코드에서
제 질문은 cmd-option-key를 사용하여 서비스를 사용하는 쉬운 방법입니까? 그렇다면 소프트웨어에 기꺼이 구현할 것입니다.
모든 것을 테스트하고 디버깅하는 방법을 알아 냈습니다./System/Library/CoreServices/pbs 및 NSUpdateDynamicServices 대신 정확히 실제 앱에서 실제로 얻은 내용과 마지막으로 캐시 한 내용을 정확히 알지 못합니다. * Mac에서 게스트 계정 만들기 * 이진 빌드하고 모든 의 Info.plist * * 앱 실행 는 * 표시 서비스 메뉴 다시 * * 로그 아웃 확인 여부를 결정하고 누락 뭐죠 기억 서비스 메뉴 를 참조 * 고객 에 로그인 OS X 사용자가 로그인하는 모든 물건 * 다음 번에 청소 : 전에는 전혀 알지 못했던 맥을 가지고있다. –