Chúng tôi gặp sự cố khi cập nhật công cụ trợ giúp với SMJobBless đã khiến chúng tôi khó hiểu trong nhiều ngày nay.Không thể truy cập mục keychain sau khi cập nhật SMJobBless
Chúng tôi đang phát triển một ứng dụng mà tại một số thời điểm chúng tôi cần thực hiện các tác vụ quản trị (tải/dỡ một kext). Chúng tôi cũng đang sử dụng keychain để lưu trữ thông tin tài khoản cho ứng dụng của chúng tôi.
Đối với các tác vụ quản trị, chúng tôi sử dụng công cụ trợ giúp được cài đặt bằng cách sử dụng SMJobBless mà chúng tôi liên lạc bằng cách sử dụng DO qua cổng Mach (với NSConnection).
Trong công cụ trợ giúp:
// use our bundle id as our service name
NSString* name = [[NSBundle mainBundle] bundleIdentifier];
launch_data_t checkinRequest = launch_data_new_string(LAUNCH_KEY_CHECKIN);
launch_data_t checkinResponse = launch_msg(checkinRequest);
launch_data_t machServicesDict = launch_data_dict_lookup(checkinResponse, LAUNCH_JOBKEY_MACHSERVICES);
launch_data_t machPort = launch_data_dict_lookup(machServicesDict, [name UTF8String]);
mach_port_t mp = launch_data_get_machport(machPort);
launch_data_free(checkinResponse);
launch_data_free(checkinRequest);
NSMachPort *receivePort = [[NSMachPort alloc] initWithMachPort:mp];
NSConnection *server = [NSConnection connectionWithReceivePort:receivePort sendPort:nil];
Trong ứng dụng:
NSConnection *conn = [NSConnection connectionWithRegisteredName:HELPER_BUNDLE_IDENTIFIER host:nil];
id proxyServerObject = [conn rootProxy];
if(conn && proxyServerObject) {
return [proxyServerObject someMethod];
}
return NO;
Chúng tôi ký cả ứng dụng và công cụ trợ giúp sử dụng chứng chỉ codesign từ Thawte. Cho đến nay, mọi thứ hoạt động như một sự quyến rũ. Công cụ trợ giúp được cài đặt và chúng ta có thể giao tiếp với nó bằng DO; kext của chúng tôi được tải và tải xuống thành công.
Sự cố bắt đầu khi chúng tôi cố gắng cập nhật công cụ trợ giúp của chúng tôi. Chúng tôi sử dụng từ điển thông tin của công cụ đã cài đặt và công cụ đi kèm trong gói ứng dụng của chúng tôi để kiểm tra xem có cần cập nhật công cụ hay không và gọi lại cho SMJobBless để thực hiện cập nhật.
Sau khi cuộc gọi SMJobBless, những dòng sau xuất hiện trong Console:
6/19/12 10:31:24.000 AM kernel: CODE SIGNING: cs_invalid_page(0x104e17000): p=74362[OURAPP] clearing CS_VALID
6/19/12 10:31:24.000 AM kernel: CODE SIGNING: cs_invalid_page(0x10d0de000): p=74364[OURAPPHELPER] clearing CS_VALID
Sau này, ứng dụng không thể đọc được mật khẩu ứng dụng từ mục keychain của chúng tôi, hàm SecKeychainItemCopyContent
lợi nhuận errSecAuthFailed (-25293)
. Tuy nhiên, không có lỗi nào được báo cáo nếu chúng tôi xác minh bằng tay mã chữ ký của công cụ trợ giúp được cài đặt của chúng tôi hoặc gói ứng dụng bằng cách sử dụng codesign -vvvv PATH_TO_TOOL_OR_BUNDLE
. Công cụ và ứng dụng được ký bên ngoài môi trường Xcode và nội dung không bị thay đổi sau quá trình ký.
Chúng tôi đã tìm thấy one other post mô tả tình huống tương tự, nhưng câu hỏi đó vẫn chưa được trả lời. Sự cố có liên quan có thể là SMJobBless returning error 4098.
Chúng tôi đang thử nghiệm trên OSX 10.7.4.
Bất kỳ ai gặp phải sự cố tương tự hoặc có điều gì rõ ràng rằng chúng tôi đang làm sai?
Tôi hiện đang chạy vào lỗi này khi cố nâng cấp công cụ trợ giúp trên Yosemite (10.10).Dường như làm việc tốt trong El Capitan (10.11). Có lẽ Apple đã sửa lỗi này? –