2012-03-03 21 views
5

Kể từ OS X 10.7.3, trình soạn thảo văn bản của tôi đang thiết lập bit "kiểm dịch" trên bất kỳ tệp nào mà nó chạm vào.Làm cách nào để ngăn ứng dụng của tôi đặt bit "kiểm dịch"?

Trình soạn thảo văn bản của tôi được thiết kế để làm việc với tập lệnh shell và nếu bit kiểm dịch được đặt thì tập lệnh shell không thể được thực thi từ dòng lệnh, cho đến khi bạn nhấp đúp vào trình tìm kiếm và xem qua "Ứng dụng này đã được tải xuống từ "cảnh báo" trên Internet (hoặc xóa bit kiểm dịch bằng xattr).

Ví dụ, tôi chỉ tạo ra một "hello world" kịch bản trong ứng dụng của tôi, nó đã được cách ly, và không thể được thực thi:

$ xattr -l foo 
com.apple.quarantine: 0006;4f51dd2f;Dux; 
$ chmod +x foo 
$ ./foo 
-bash: ./foo: Operation not permitted 

Nếu tôi loại bỏ các bit kiểm dịch, kịch bản hoạt động:

$ xattr -d com.apple.quarantine foo 
$ ./foo 
hello world 


Theo một số bài trên diễn đàn, TextEdit cũng đặt các bit kiểm dịch trên bất kỳ shell script nó tạo ra.

Tôi đang sử dụng một NSDocument lớp đơn giản để tạo ra các file:

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError 
{ 
    return [self.textStorage.string dataUsingEncoding:self.stringEncoding]; 
} 


Làm thế nào tôi có thể loại bỏ các bit kiểm dịch từ các tập tin được tạo ra trong ứng dụng của tôi? Các trình chỉnh sửa văn bản khác, chẳng hạn như TextWrangler, không đặt bit cách ly.

CẬP NHẬT

Một chút biết thêm, điều này chỉ xảy ra khi tạo ra một "ứng dụng kịch bản" tập tin, đó là bất cứ điều gì từ kịch bản perl để html.

Và nó chỉ xảy ra khi ứng dụng của tôi được sandboxed. Việc tắt hộp cát sẽ khắc phục sự cố, nhưng đó không phải là giải pháp lâu dài.

Tôi đã gửi lỗi với Radar, có vẻ như không có gì để làm nhưng chờ/hy vọng rằng đại lộ đã được khắc phục.

Trả lời

0

Theo như tôi có thể biết, lỗi này đã được sửa trong OS X 10.8 (Mountain Lion).

Có vẻ như tôi sẽ phải tạo 10.8 phiên bản hệ điều hành tối thiểu cho ứng dụng của mình. Không thực sự là một việc lớn đối với tôi ... nhưng hy vọng Apple sẽ sửa nó trong một bugfix thành 10.7 (yêu cầu hệ thống cho 10.8 cao hơn một chút so với 10.7, tôi biết những người không thể nâng cấp).

+0

Bạn có chắc chắn điều này đã được sửa chưa? Tôi gặp vấn đề tương tự chính xác này trên 10.8.2 - tất cả các tệp mà ứng dụng của tôi tạo đang bị cách ly. –

+0

@DennisRitchie nếu tôi tạo một tài liệu văn bản thuần tuý mới trong TextEdit và lưu nó vào màn hình nền dưới dạng "test.rb", tệp này không bị cách ly. Trên OS X 10.7 nó sẽ bị cách ly. Có lẽ có những tình huống khác mà điều tương tự có thể xảy ra? Tôi nghĩ bạn nên mở một câu hỏi mới tách biệt với tôi. –

+3

cũng không được sửa cho tôi trong 10,8. kỳ lạ, thêm 'com.apple.security.files.user-selected.executable' vào các quyền lợi sửa lỗi vấn đề cho tôi – user1259710

1

Hãy thử đảm bảo rằng LSFileQuarantineEnabled trong Info.plist của bạn được đặt thành false (phải là mặc định). Nếu thuộc tính vẫn đang được đặt, thì tôi khuyên bạn nên gửi báo cáo lỗi và xóa thuộc tính theo chương trình với removexattr(2)/fremovexattr(2)

+0

Xin cảm ơn, việc thêm mục nhập vào bài viết của tôi sẽ khắc phục được sự cố, tuy nhiên tài liệu nêu rõ KHÔNG là mặc định, có lẽ họ đã đổi thành YES trong 10.7.3. –

+0

Thực ra, nó có vẻ không hoạt động (không chắc chuyện gì đang xảy ra?) Tôi chắc là tôi đã thử nghiệm nó, nhưng bây giờ tôi thấy cùng một vùng cách ly mặc dù ứng dụng của tôi vẫn có 'LSFileQuarantineEnabled' được đặt thành 'NO'. –

+0

Nộp lỗi và thử xóa cờ theo cách thủ công. –

1

Rất vui được biết rằng tôi không phải là người duy nhất có vấn đề này - rất khó theo dõi -trên thông tin về. Tôi đã tìm thấy vấn đề này xảy ra với các tập tin dữ liệu được lưu bởi chương trình của tôi (đây không phải là kịch bản, họ chỉ là dữ liệu XML ...).

Tôi xác nhận rằng LSFileQuarantineEnabled không có sự khác biệt.

Tôi cũng đã cố xóa thuộc tính sau khi tệp được viết, sử dụng removexattr http://hints.macworld.com/article.php?story=20071029151619619, nhưng điều này không hoạt động - hộp cát ngăn cuộc gọi hoạt động.

Qua bối cảnh, tôi cũng thấy cuộc thảo luận này của vấn đề: http://reviews.cnet.com/8301-13727_7-57374676-263/workarounds-for-quarantine-bug-in-os-x-lion/

Đối với hồ sơ, tôi đã nêu ra riêng một lỗi với Apple.

CHỈNH SỬA: Tôi đã tìm thấy nguồn gốc của sự cố và đã tìm ra công việc xung quanh.

Vấn đề là nếu dữ liệu tệp là dữ liệu định dạng XML đơn giản, MacOS hiển thị nhầm thông điệp được báo cáo (tôi nghĩ điều này là do nó sai giả định rằng tệp là tập lệnh). Nếu tôi thay đổi định dạng tệp thành một thay thế rõ ràng không phải là XML, cảnh báo sẽ biến mất. Tệp vẫn được lưu với bộ bit kiểm dịch, tuy nhiên!

Vì vậy, điều này chắc chắn là do một vấn đề trong MacOS, nhưng có một công việc tương đối dễ dàng - chỉ cần thay đổi định dạng tệp của bạn!

+0

Có vẻ như nó đã được sửa trong OS X 10.8 (tôi sẽ trả lời câu hỏi của tôi với điều đó, nhưng muốn bình luận để chắc chắn rằng bạn tìm ra). Tôi đoán chúng tôi chỉ cần làm cho các ứng dụng sandboxed của chúng tôi yêu cầu 10.8. –

+0

Cảm ơn thông tin Abhi! – Pete

Các vấn đề liên quan