Lỗi Xcode 6.1 khi xây dựng IPA


140

Chỉ cần nâng cấp lên Xcode 6.1 ngay hôm nay và đoán xem: Bây giờ tôi gặp sự cố khi gửi bản dựng bằng ứng dụng máy tính để bàn TestFlight. Đây là lỗi tôi gặp phải trong khi ứng dụng bắt đầu xây dựng IPA:

Lỗi

lỗi: / usr / bin / Codeign --force --preserve-metadata = định danh, quyền lợi, quy tắc tài nguyên --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-quy tắc = / tmp / QYFSJI / 7 /QYFSJIvu7W/Payload/XX.app không thành công với lỗi 1. Kết quả: Cảnh báo: sử dụng --preserve-metadata với tùy chọn "resource-rule" (không dùng trong Mac OS X> = 10.10)! Cảnh báo: - quy tắc nguồn đã bị phản đối trong Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: không thể đọc tài nguyên

'Điều khoản hỗ trợ' không biết chuyện gì đang xảy ra.

Nó dường như không phải là một vấn đề TestFlight vì điều tương tự xảy ra trong môi trường CI như Jenkins sử dụng xcrun hoặc các công cụ tương tự.

Ứng dụng không được cập nhật trong nhiều tháng, vì vậy tôi biết rằng tôi không nên mong đợi bất kỳ bản cập nhật nào sẽ sớm khắc phục điều này. Nó đã từng làm việc rất tốt cho tôi và khách hàng của tôi vì vậy tôi cũng không thực sự muốn từ bỏ nó vì mục đích khác.

Bất kỳ ý tưởng cho những gì lỗi này là về, và cách khắc phục nó sẽ được đánh giá rất cao.


4
Nó dường như không phải là một vấn đề TestFlight vì điều tương tự xảy ra trong môi trường CI sử dụng lệnh xcrun như thế này : xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>. Với Xcode 6.0.1, tất cả đều hoạt động tốt.
Daniel Martín

Câu trả lời:


312

Tôi ước tôi biết tại sao nó hoạt động, nhưng đây là một bản sửa lỗi phù hợp với tôi:

Tìm thấy các sửa chữa!

Nhấp vào dự án của bạn> Mục tiêu> Chọn mục tiêu của bạn> Xây dựng cài đặt>

Code Signing Resource Rules Path

và thêm:

$(SDKROOT)/ResourceRules.plist


7
Cảm ơn! Thành thật mà nói tôi không quan tâm tại sao nó hoạt động :) chỉ là mới nhất trong những gì Apple đã phá vỡ chuỗi lớn của họ trong vài tháng qua. Dù sao, cảm ơn đã chỉ ra giải pháp. (và một downvote cho tôi vì đã không tìm kiếm lỗi kỹ lưỡng trước khi đăng)
Şafak Gezer

10
CODE_SIGN_RESOURCE_RULES_PATH là tên biến nếu bạn đang chỉnh sửa cài đặt xcodeproj của mình thông qua tập lệnh hoặc dòng lệnh. developer.apple.com/l
Library / ios / recipes / từ

5
Tôi không thể thấy Code Signing Resource Rules Pathtrong Cài đặt bản dựng. Bất kỳ ý tưởng?
Georg

7
Đảm bảo bạn đã chọn TẤT CẢ và không cài đặt CƠ BẢN (Hàng bên dưới "Chung, Khả năng, Thông tin, Cài đặt bản dựng, v.v.")
NHƯ

Rõ ràng điều này sẽ khiến ứng dụng của bạn bị từ chối: stackoverflow.com/questions/26488077/ cấp
Glenn Maynard

61

Bản vá sau đây cho Gói ứng dụng đã sửa nó cho tôi, tôi đã xóa các quy tắc tài nguyên vì nó nói rằng nó không dùng nữa vào ngày 10.10.

Testflight xây dựng công việc mà không có nó. Appstore xây dựng quá.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
 % diff PackageApplication PackageApplicationFixed 
155,157c155,156
<     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<                          "--sign", $opt{sign},
<                          "--resource-rules=$destApp/ResourceRules.plist");
---
>     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
>                          "--sign", $opt{sign});

Đã xóa tham số không dùng nữa từ GóiApplication và trình xây dựng hiện xây dựng ứng dụng Python của tôi cho iOS
Ian Ellis

Sửa chữa tuyệt vời! Cảm ơn rất nhiều :) Cài đặt "Đường dẫn quy tắc tài nguyên ký mã" ở trên không khắc phục được sự cố của tôi nhưng câu trả lời này đã được thực hiện, cộng với việc sửa lỗi hiện có trên toàn cầu trong tất cả các dự án :)
Pellet

@IanEllis: Bạn có thể vui lòng cho tôi biết làm thế nào bạn loại bỏ tham số "quy tắc tài nguyên" khỏi GóiApplication. Nó sẽ giúp ích rất nhiều !!
Rashmi Ranjan mallick

8
Đây là một oneliner để sửa GóiApplication: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, resource-rule (. * Sign}). * ResourceRules.plist "/ $ 1 / smg '" / Ứng dụng / Xcode6.1.1.app / Nội dung / Nhà phát triển / Nền tảng / iPhoneOS.pl platform / Developer / usr / bin / GóiApplication "(điều chỉnh đường dẫn của bạn) Và một tập lệnh đầy đủ để áp dụng điều này: bitbucket.org/weWantToKnow/xcode_scripts/raw/ để sử dụng: xcode_fix_PackageApplicationResourceRules.sh /Appluggest/Xcode6.1.1.app
coffeebreaks

Đây là câu trả lời chính xác. Câu trả lời cài đặt bản dựng buộc sử dụng API không dùng nữa.
Jameson

10

Tôi đã gửi email cho bộ phận hỗ trợ TestFlight và nhận được phản hồi này:

Nhóm của chúng tôi hiện đang điều tra vấn đề này với ứng dụng TestFlight Desktop. Trong thời gian chờ đợi, vui lòng sử dụng Xcode để tạo tệp IPA và sau đó tải nó lên bằng ứng dụng máy tính để bàn hoặc trang web TestFlight.

Giải pháp đề xuất đã làm việc.


1
Nó hoạt động với tôi chỉ là tạo .ipa bằng Xcode và tải lên thông qua ứng dụng máy tính để bàn.
LivingTech

@livingtech Vâng, tuy nhiên, tôi cũng nhận được "Xcode đáng sợ tạo ra một hồ sơ mới thay vì chọn một cái tôi muốn" -có thể
helmesjo

10

Câu trả lời của Tim Gostony không còn hoạt động kể từ khi phát hành Xcode 7. Bây giờ quy trình gửi App Store không thành công khi có quy tắc tài nguyên. Giải pháp là xóa Đường dẫn quy tắc tài nguyên ký mã của bạn và thay thế xcrun bằng công cụ xcodebuild:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

Tùy chọn đơn giản nhất.plist để xuất các tệp ipa phân phối đặc biệt trông như thế này:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>iCloudContainerEnvironment</key>
    <string>Production</string>
    <key>teamID</key>
    <string>[YOUR TEAM ID]</string>
    <key>method</key>
    <string>ad-hoc</string>
</dict>
</plist>

Có các tùy chọn khác có sẵn cho tệp plist này liên quan đến bitcode, làm mỏng ứng dụng, v.v ... Đó là lý do tại sao tôi nghĩ công cụ xcodebuild là công cụ phù hợp để xuất các tệp ipa cho iOS 9 trở lên.

Thông tin chi tiết về plist tùy chọn có sẵn với lệnh xcodebuild -help.


cảm ơn Vladimir, tôi đã thực sự bối rối về điều này với cách nó xung đột với các bài nộp Xcode 7.
kevinl

Làm thế nào chính xác để bạn thay thế xcrun? Tôi không thể thấy bất kỳ cài đặt nào cho plugin đó trong Jenkins Xcode :(
Hlung

2

Trên Yosemite w / XCode 6.4 ngay cả khi sử dụng bản vá SDKROOT, việc gán mã không thành công. Bài viết sau đây giải thích cách vá tập lệnh XCode để khắc phục điều này. Lưu ý rằng đây là bản vá XCode, vì vậy nó là phiên bản cụ thể, nhưng khắc phục vấn đề.

http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts


1

Câu trả lời từ Alistra phù hợp với tôi nhưng tôi không muốn thay đổi tập lệnh không phải của tôi (bản phát hành Xcode trong tương lai có thể thay đổi tệp này và việc sửa sẽ bị mất).

 diff PackageApplication PackageApplicationFixed 155,157c155,156
<-     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<-                          "--sign", $opt{sign},
<-                          "--resource-rules=$destApp/ResourceRules.plist");
---
->     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
->                          "--sign", $opt{sign});

Tôi nghĩ câu trả lời từ Vladimir Grigorov là tốt nhất nếu bạn có một kho lưu trữ bằng cách sử dụng:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

Trong trường hợp của tôi, tôi không có kho lưu trữ, vì tôi sửa đổi ứng dụng sau khi xây dựng nó và tôi cần thay đổi Id Gói và ký chứng chỉ.

Giải pháp tôi tìm thấy là gọi cho codesignmình trước khi sử dụng PackageApplicationvà yêu cầu PackageApplicationkhông ký. Như thế này :

replace :

 /usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>"

by :

/bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision"
/usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>"

Đừng quên nhúng .mobileprovisiontệp bằng cách đăng nhập cp.


0

Như được chỉ định trong câu trả lời khác , bạn cũng có thể không chỉ định chứng chỉ phân phối để đăng nhập và nó sẽ đóng gói chính xác. TestFlight sẽ cần cập nhật ứng dụng của họ để làm điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.