2012-03-08 27 views
23

Tôi đang cố gắng tải ứng dụng của mình, không xuất hiện trong Dock, để có tùy chọn khởi chạy khi đăng nhập. Điều này là khó khăn, và liên quan đến việc tạo ra một ứng dụng trợ giúp thứ hai mà bạn thêm vào như là một mục khởi động. Ứng dụng trợ giúp này chỉ chịu trách nhiệm khởi chạy ứng dụng chính và sau đó thoát ra.Vấn đề ký mã cho dự án có nhiều mục tiêu

Tôi đã làm theo các hướng dẫn herehere và nó hoạt động như một nét duyên dáng - tất nhiên, vấn đề là ký mã. Tôi có hai mục tiêu; mục tiêu ứng dụng trợ giúp được sao chép vào thư mục con Contents/Library/LoginItems của gói chính lúc biên dịch. Mỗi bó có nhận dạng bó riêng của mình và triển khai riêng hồ sơ dự phòng, nhưng khi tôi xác nhận lưu trữ của tôi cho các cửa hàng ứng dụng, tôi nhận được lỗi sau:

Invalid provisioning profile. The provisioning profile included in the bundle BUNDLE NAME [BUNDLE NAME.app] is invalid. For more information, visit the Mac OS Developer Portal. 

Nếu tôi loại bỏ các gói trợ giúp từ mục tiêu chính của tôi, không có vấn đề. Có vẻ như sự hiện diện của một cấu hình cấp phép khác đang tắt lỗi.

Làm cách nào để bao gồm hai gói đã ký và vượt qua xác thực?

+0

Tôi có cùng một vấn đề chính xác ... – mirosval

+0

Hiện tại, tôi đã vô hiệu hóa hộp cát. Đó là một "giải pháp" rất tạm thời sẽ chỉ hoạt động cho đến khi Apple sửa chữa Xcode hoặc ngừng đẩy lùi thời hạn sandbox. –

+0

Điều này không giải quyết được vấn đề cho tôi, tôi vẫn không vượt qua xác nhận nếu tôi vô hiệu hóa quyền lợi, tôi sẽ chỉ chuyển nếu tôi xóa ứng dụng trợ giúp ... – mirosval

Trả lời

8

cuối cùng tôi đã có thể giải quyết vấn đề này bằng cách sử dụng codesign trên máy tính của đồng nghiệp (chắc chắn phải có một cái gì đó sai với Keychain của tôi) và xóa các tập tin embedded.provisionprofile từ ứng dụng helper bởi thêm tập lệnh chạy sau:

if [ -f "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/embedded.provisionprofile" ]; 
then 
    rm "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/embedded.provisionprofile" 
    echo "Removed embedded provisioning profile." 
else 
    echo "No profile found" 
fi 
3

Bạn nên sử dụng cùng một Chứng chỉ sản xuất trên Cửa hàng ứng dụng Mac để ký cả ứng dụng trợ giúp và ứng dụng chính. Tôi đã không cố gắng này trong Xcode - chúng tôi có một ứng dụng trợ giúp đó là một nguồn tài nguyên bó, nhưng ký mã của chúng tôi là một kịch bản dòng lệnh. Chúng tôi không gặp bất kỳ sự cố nào với hệ thống cửa hàng ứng dụng.

Tôi không chắc chắn lý do tại sao bạn kết thúc bằng hồ sơ cấp phép trong sản phẩm được tạo và tôi không nghĩ rằng điều này là bắt buộc đối với việc gửi cửa hàng ứng dụng. Bạn có thể thử sử dụng codesign bằng tay:

codesign -f -s "3rd Party Mac Developer Application: My Company" \ 
    -i "com.mycompany.loginitem" \ 
    --entitlements path/to/loginitem.entitlements" \ 
    path/to/appname.app/Contents/Library/LoginItems/loginitem.app 

codesign -f -s "3rd Party Mac Developer Application: My Company" \ 
    -i "com.mycompany.appname" \ 
    --entitlements path/to/app.entitlements" \ 
    path/to/appname.app 
+0

Hai vấn đề: nếu tôi nhìn vào gói, tôi thực sự thấy tệp 'embedded.provisionprofile' và nếu tôi cố gắng sử dụng' codesign', tôi nhận được lỗi sau: định dạng tệp đối tượng không được nhận dạng, không hợp lệ hoặc không phù hợp '. Bất kỳ suy nghĩ về điều này? –

+0

Tôi không nghĩ rằng tôi đã nhìn thấy lỗi đó. Bạn đang ký một gói '.app' hay nó chỉ là một tệp thực thi? Tôi nhớ có vấn đề khi cố gắng đăng ký một tập tin thực thi trực tiếp, nhưng có vẻ như nó hoạt động tốt cho tôi. Hồ sơ không cần thiết (ít nhất chúng tôi chưa gặp phải bất kỳ vấn đề nào với điều đó) - điều gì sẽ xảy ra nếu bạn xóa nó và thử ký? – wbyoung

+1

Ash Furrow - bạn đã bao giờ giải quyết vấn đề này chưa? – tomtaylor

0

Tôi cũng gặp vấn đề tương tự. Thay vì xóa embedded.provisionprofile khỏi ứng dụng trợ giúp tôi vừa vô hiệu hóa cấp phép (provision provision: None) để lại việc xác định và quyền ký tên mã tại chỗ. Đã gửi ứng dụng của tôi để xem xét mà không gặp bất kỳ sự cố nào.

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