Kesalahan Xcode 6.1 saat membangun IPA


140

Baru saja ditingkatkan ke Xcode 6.1 hari ini, dan coba tebak: Sekarang saya mengalami kesulitan mengirimkan bangunan menggunakan aplikasi desktop TestFlight. Inilah kesalahan yang saya dapatkan saat aplikasi mulai membangun IPA:

Kesalahannya

galat: / usr / bin / codesign --force --preserve-metadata = pengidentifikasi, hak, aturan sumber daya --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tpl / source /QYFSJIvu7W/Payload/XX.app gagal dengan kesalahan 1. Output: Peringatan: penggunaan --preserve-metadata dengan opsi "resource-rules" (usang di Mac OS X> = 10.10)! Peringatan: - aturan sumber daya telah usang di Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: tidak dapat membaca sumber daya

'Artikel Pendukung' tidak tahu apa yang sedang terjadi.

Tampaknya tidak menjadi masalah TestFlight karena hal yang sama terjadi di lingkungan CI seperti Jenkins menggunakan xcrun atau alat serupa.

Aplikasi ini tidak diperbarui selama berbulan-bulan, jadi saya tahu bahwa saya seharusnya tidak mengharapkan pembaruan apa pun untuk memperbaikinya dalam waktu dekat. Dulu bekerja dengan sangat baik untuk saya dan klien saya, jadi saya tidak terlalu ingin meninggalkannya untuk hal lain juga.

Ada ide untuk kesalahan ini, dan bagaimana cara memperbaikinya akan sangat dihargai.


4
Ini tampaknya tidak menjadi masalah TestFlight karena hal yang sama terjadi di lingkungan CI menggunakan perintah xcrun seperti ini: xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>. Dengan Xcode 6.0.1, semuanya bekerja dengan baik.
Daniel Martín

Jawaban:


312

Saya berharap saya tahu mengapa itu bekerja, tapi di sini ada perbaikan yang bekerja untuk saya:

Menemukan perbaikannya!

Klik proyek Anda> Target> Pilih target Anda> Bangun Pengaturan>

Code Signing Resource Rules Path

dan tambahkan :

$(SDKROOT)/ResourceRules.plist


7
Terima kasih! Terus terang saya tidak peduli mengapa itu bekerja :) hanya yang terbaru dalam apa yang Apple hancurkan dengan serangkaian sekrup-up dalam beberapa bulan terakhir. Bagaimanapun, terima kasih telah menunjukkan solusinya. (dan downvote untuk saya karena tidak mencari kesalahan dengan saksama sebelum memposting)
Şafak Gezer

10
CODE_SIGN_RESOURCE_RULES_PATH adalah nama variabel jika Anda mengedit pengaturan xcodeproj Anda melalui skrip atau baris perintah. developer.apple.com/library/ios/recipes/…
roblocop

5
Saya tidak bisa melihat Code Signing Resource Rules Pathdi Pengaturan Bangun saya. Ada ide?
Georg

7
Pastikan Anda memilih SEMUA dan bukan pengaturan DASAR (Baris di bawah "Umum, Kemampuan, Info, Pengaturan Bangun dll")
AS

Tampaknya ini akan membuat aplikasi Anda ditolak: stackoverflow.com/questions/26488077/…
Glenn Maynard

61

Patch berikut untuk PackageApplications memperbaikinya untuk saya, saya menghapus aturan sumber daya karena dikatakan sudah usang pada 10.10.

Testflight membangun kerja tanpanya. Appstore juga dibuat.

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

Dihapus parameter usang usang dari PackageApplication, dan buildozer sekarang membangun aplikasi Python saya untuk iOS
Ian Ellis

Perbaikan hebat! Terima kasih banyak :) Pengaturan "Jalur Penandatanganan Aturan Aturan Sumber Daya" di atas tidak memperbaiki masalah saya tetapi jawaban ini berhasil, ditambah perbaikannya sekarang mendunia di semua proyek :)
Pellet

@IanEllis: Bisakah Anda memberi tahu saya bagaimana Anda menghapus parameter "aturan sumber daya" dari PackageApplication. Ini akan sangat membantu !!
Rashmi Ranjan mallick

8
Inilah oneliner untuk memperbaiki PackageApplication: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, aturan-sumber daya (. * Tanda}). * ResourceRules.plist "/ $ 1 / smg '" / / Applications / Xcode6.1.1.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / PackageApplication "(sesuaikan jalur Anda) dan skrip lengkap untuk menerapkan ini: bitbucket.org/WeWantToKnow/xcode_scripts/raw/… menggunakan: xcode_fix_PackageApplicationResourceRules.sh /Applications/Xcode6.1.1.app
coffeebreaks

Ini jawaban yang benar. Jawaban pengaturan bangunan memaksa penggunaan API yang tidak digunakan lagi.
Jameson

10

Saya mengirim email dukungan TestFlight dan mendapat respons ini:

Tim kami saat ini sedang menyelidiki masalah ini dengan aplikasi TestFlight Desktop. Sementara itu, silakan gunakan Xcode untuk membuat file IPA dan kemudian mengunggahnya menggunakan aplikasi desktop atau situs web TestFlight.

Solusi yang disarankan berhasil.


1
Ini berhasil bagi saya untuk hanya membuat .ipa dengan Xcode, dan mengunggah melalui aplikasi desktop.
livingtech

@livingtech Ya, namun saya juga mendapat "Xcode yang ditakuti menghasilkan profil baru alih-alih memilih yang saya inginkan" -bug :) Mengunggah dengan testflight langsung bekerja dengan baik.
helmesjo

10

The jawaban oleh Tim Gostony tidak lagi bekerja sejak rilis Xcode 7. Sekarang proses pengajuan App Store gagal ketika aturan sumber daya yang hadir. Solusinya adalah dengan menghapus Jalur Aturan Penandatanganan Kode Sumber Daya Anda dan ganti xcrun dengan alat xcodebuild:

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

Options.plist yang paling sederhana untuk mengekspor file ipa distribusi ad-hoc terlihat seperti ini:

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

Ada opsi lain yang tersedia untuk file plist ini mengenai bitcode, penipisan aplikasi, dll. Itulah mengapa saya pikir alat xcodebuild adalah alat yang tepat untuk mengekspor file ipa untuk iOS 9 ke atas.

Rincian lebih lanjut tentang opsi plist tersedia dengan perintah xcodebuild -help.


terima kasih Vladimir, saya menjadi sangat bingung dengan ini bagaimana hal itu bertentangan dengan pengiriman Xcode 7.
kevinl

bagaimana tepatnya Anda mengganti xcrun? Saya tidak dapat melihat pengaturan untuk itu dalam plugin Jenkins Xcode :(
Hlung


1

The jawaban dari Alistra bekerja untuk saya, tapi saya tidak ingin mengubah script yang bukan milikku (rilis Xcode masa depan mungkin mengubah file ini dan koreksi akan hilang).

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

Saya pikir jawaban dari Vladimir Grigorov adalah yang terbaik jika Anda memiliki arsip menggunakan:

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

Dalam kasus saya, saya tidak memiliki arsip, karena saya memodifikasi aplikasi setelah membangunnya dan saya perlu mengubah Bundle Id dan menandatangani sertifikat.

Solusi yang saya temukan adalah menelepon codesigndiri sendiri sebelum digunakan PackageApplicationdan meminta PackageApplicationuntuk tidak menandatangani. Seperti ini :

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

Jangan lupa untuk menyematkan .mobileprovisionfile yang digunakan untuk masuk cp.


0

Seperti yang ditentukan dalam jawaban lain , Anda juga bisa tidak menentukan sertifikat distribusi untuk ditandatangani dan itu akan paket dengan benar. TestFlight perlu memperbarui aplikasi mereka untuk melakukan ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.