Xcode 6.1 ข้อผิดพลาดขณะสร้าง IPA


140

เพิ่งอัปเกรดเป็น Xcode 6.1 วันนี้และคาดเดาว่า: ตอนนี้ฉันมีปัญหาในการส่งบิลด์โดยใช้แอป TestFlight บนเดสก์ท็อป นี่คือข้อผิดพลาดที่ฉันได้รับขณะที่แอพเริ่มสร้าง IPA:

ข้อผิดพลาด

ข้อผิดพลาด: / usr / bin / codesign - แรง --preserve-metadata = ตัวบ่งชี้, การให้สิทธิ์, กฎของทรัพยากร --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app /QYFSJIvu7W/Payload/XX.app ล้มเหลวโดยมีข้อผิดพลาด 1 เอาต์พุต: คำเตือน: การใช้งาน --preserve-metadata พร้อมตัวเลือก "resource-rules" (คัดค้านใน Mac OS X> = 10.10)! คำเตือน: --resource-rules เลิกใช้แล้วใน Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: ไม่สามารถอ่านทรัพยากร

'บทความสนับสนุน' ไม่มีความคิดว่าเกิดอะไรขึ้น

ดูเหมือนจะไม่เป็นปัญหา TestFlight เพราะสิ่งเดียวกันเกิดขึ้นในสภาพแวดล้อม CI เช่น Jenkins โดยใช้ xcrun หรือเครื่องมือที่คล้ายกัน

แอพไม่ได้รับการอัปเดตเป็นเวลาหลายเดือนดังนั้นฉันรู้ว่าฉันไม่ควรคาดหวังว่าจะมีการอัปเดตใด ๆ มันใช้งานได้ดีจริงๆสำหรับฉันและลูกค้าของฉันดังนั้นฉันจึงไม่กระตือรือร้นที่จะละทิ้งมันเพื่อสิ่งอื่นเช่นกัน

ความคิดเห็นใด ๆ เกี่ยวกับข้อผิดพลาดนี้คืออะไรและวิธีการแก้ไขจะได้รับการชื่นชมอย่างมาก


4
มันดูเหมือนจะไม่เป็นปัญหา TestFlight เพราะสิ่งเดียวกันที่เกิดขึ้นในสภาพแวดล้อม CI โดยใช้คำสั่ง xcrun xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>เช่นนี้ ด้วย Xcode 6.0.1 มันใช้งานได้ดี
Daniel Martín

คำตอบ:


312

ฉันหวังว่าฉันจะรู้ว่าทำไมมันถึงได้ผล แต่นี่เป็นการแก้ไขที่เหมาะกับฉัน:

พบการแก้ไข!

คลิกที่โครงการของคุณ> เป้าหมาย> เลือกเป้าหมายของคุณ> สร้างการตั้งค่า>

Code Signing Resource Rules Path

และเพิ่ม:

$(SDKROOT)/ResourceRules.plist


7
ขอบคุณ! ตรงไปตรงมาฉันไม่สนใจว่าทำไมมันถึงทำงาน :) แค่ล่าสุดในสิ่งที่ Apple บุกเข้ามาในช่วงสองสามเดือนที่ผ่านมา อย่างไรก็ตามขอขอบคุณที่ชี้ให้เห็นวิธีการแก้ปัญหา (และ downvote สำหรับฉันที่ไม่ได้ค้นหาข้อผิดพลาดอย่างละเอียดก่อนโพสต์)
Şafak Gezer

10
CODE_SIGN_RESOURCE_RULES_PATH เป็นชื่อตัวแปรหากคุณกำลังแก้ไขการตั้งค่า xcodeproj ของคุณผ่านสคริปต์หรือบรรทัดคำสั่ง developer.apple.com/library/ios/recipes/…
roblocop

5
ฉันไม่เห็นCode Signing Resource Rules Pathในการตั้งค่า Build ของฉัน ความคิดใด ๆ
Georg

7
ให้แน่ใจว่าคุณเลือกไว้ทั้งหมดและไม่ได้ตั้งค่าพื้นฐาน (แถวด้านล่าง "ทั่วไป, ความสามารถ, ข้อมูล, สร้างการตั้งค่า ฯลฯ" The)
AS

เห็นได้ชัดว่าสิ่งนี้จะทำให้แอปของคุณถูกปฏิเสธ: stackoverflow.com/questions/26488077/…
Glenn Maynard

61

แพทช์ต่อไปนี้สำหรับ PackageApplications แก้ไขให้ฉันฉันลบกฎทรัพยากรตามที่ระบุว่าเลิกใช้ 10.10

Testflight สร้างงานโดยไม่ต้อง Appstore ก็สร้างเช่นกัน

/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});

ลบพารามิเตอร์อันธพาลปลอมออกจาก PackageApplication และตอนนี้ buildozer จะสร้างแอพ Python ของฉันสำหรับ iOS
Ian Ellis

แก้ไขดีมาก! ขอบคุณมาก :) ข้างต้น "รหัสการลงนามทรัพยากรกฎเส้นทาง" การตั้งค่าไม่สามารถแก้ไขปัญหาของฉัน แต่คำตอบนี้ไม่รวมการแก้ไขอยู่ในขณะนี้ทั่วโลกในทุกโครงการ :)
เม็ด

@IanEllis: คุณช่วยกรุณาบอกให้ฉันรู้ว่าคุณลบพารามิเตอร์ "resource-rules" ออกจาก PackageApplication ได้อย่างไร มันจะช่วยได้มาก !!
Rashmi Ranjan mallick

8
นี่คือผู้แก้ไขปัญหาในการแก้ไข PackageApplication: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, กฎทรัพยากร (. * เครื่องหมาย}) * ResourceRules.plist "/ $ 1 / smg '" / Applications / Xcode6.1.1.app / เนื้อหา / ผู้พัฒนา / แพลตฟอร์ม / iPhoneOS.platform / Developer / usr / bin / PackageApplication "(ปรับเส้นทางของคุณ) และสคริปต์เต็มรูปแบบที่จะใช้สิ่งนี้: bitbucket.org/WeWantToKnow/xcode_scripts/raw/ ใช้: xcode_fix_PackageApplicationResourceRules.sh /Applications/Xcode6.1.1.app
coffeebreaks

นี่คือคำตอบที่ถูกต้อง คำตอบการตั้งค่าการสร้างบังคับให้ใช้ API ที่เลิกใช้แล้ว
Jameson

10

ฉันส่งอีเมลการสนับสนุน TestFlight และได้รับการตอบสนองนี้:

ทีมของเรากำลังตรวจสอบปัญหานี้ด้วยแอป TestFlight Desktop ในระหว่างนี้โปรดใช้ Xcode เพื่อสร้างไฟล์ IPA แล้วอัปโหลดโดยใช้แอปเดสก์ท็อปหรือเว็บไซต์ TestFlight

วิธีแก้ปัญหาที่แนะนำใช้งานได้


1
มันทำงานให้ฉันแค่สร้าง. ipa ด้วย Xcode แล้วอัปโหลดผ่านแอปเดสก์ท็อป
livingtech

@livingtech ใช่ แต่ฉันก็มี "Xcode ที่น่ากลัวสร้างโปรไฟล์ใหม่แทนที่จะเลือกโปรไฟล์ที่ฉันต้องการ" -bug :) การอัปโหลดด้วย testflight ทำงานได้อย่างยอดเยี่ยมโดยตรง
helmesjo

10

คำตอบโดยทิม Gostony ไม่ทำงานตั้งแต่การเปิดตัวของ Xcode 7 ตอนนี้ขั้นตอนการส่ง App Store ล้มเหลวเมื่อกฎทรัพยากรที่มีอยู่ วิธีแก้ไขคือการล้างเส้นทางกฎการลงนามรหัสและแทนที่ xcrun ด้วยเครื่องมือ xcodebuild:

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

Options.plist ที่ง่ายที่สุดสำหรับการส่งออกไฟล์ ada hoc แบบกระจายมีลักษณะดังนี้:

<?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>

มีตัวเลือกอื่น ๆ สำหรับไฟล์ plist นี้เกี่ยวกับ bitcode, แอพ thinning เป็นต้นนั่นคือเหตุผลที่ฉันคิดว่าเครื่องมือ xcodebuild เป็นเครื่องมือที่เหมาะสมสำหรับการส่งออกไฟล์ ipa สำหรับ iOS 9 ขึ้นไป

รายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกตัวเลือกสามารถใช้ได้กับคำสั่ง xcodebuild -help


ขอบคุณ Vladimir ฉันรู้สึกสับสนกับเรื่องนี้มากกับความขัดแย้งกับการส่ง Xcode 7
kevinl

คุณจะแทนที่ xcrun ได้อย่างไร? ฉันไม่เห็นการตั้งค่าสำหรับปลั๊กอิน Jenkins Xcode :(
Hlung

2

บน Yosemite w / XCode 6.4 แม้การใช้ SDKROOT patch การกำหนดรหัสล้มเหลว บทความต่อไปนี้อธิบายวิธีการแก้ไขสคริปต์ XCode เพื่อแก้ไขปัญหานี้ โปรดทราบว่านี่คือการแก้ไข XCode ดังนั้นจึงเป็นรุ่นเฉพาะ แต่แก้ไขปัญหา

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


1

คำตอบจากการทำงาน Alistra สำหรับฉัน แต่ฉันไม่ต้องการที่จะเปลี่ยนสคริปต์ซึ่งไม่ได้เป็นเหมือง (รุ่นที่ในอนาคตอาจมีการเปลี่ยนแปลง Xcode ไฟล์นี้และการแก้ไขจะหายไป)

 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});

ฉันคิดว่าคำตอบจาก Vladimir Grigorov ดีที่สุดถ้าคุณมีที่เก็บถาวรโดยใช้:

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

ในกรณีของฉันฉันไม่มีไฟล์เก็บถาวรเพราะฉันแก้ไขแอปพลิเคชันหลังจากสร้างและฉันต้องเปลี่ยน Bundle Id และใบรับรองการเซ็นชื่อ

วิธีแก้ปัญหาที่ฉันพบคือโทรหาcodesignตัวเองก่อนใช้PackageApplicationและถามPackageApplicationให้ลงชื่อ แบบนี้ :

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>"

อย่าลืมที่จะฝังตัวไฟล์โดยใช้จะเซ็นสัญญากับ.mobileprovisioncp


0

ตามที่ระบุไว้ในคำตอบอื่นคุณยังไม่สามารถระบุใบรับรองการแจกจ่ายเพื่อลงชื่อด้วยและมันจะจัดแพคเกจอย่างถูกต้อง TestFlight จะต้องอัปเดตแอปเพื่อทำสิ่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.