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.

Şafak Gezer
sumber
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

Tim
sumber
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});
Alistra
sumber
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.

Adam
sumber
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.

Vladimir Grigorov
sumber
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
2

Pada Yosemite w / XCode 6.4 bahkan menggunakan patch SDKROOT, codesigning gagal. Artikel berikut menjelaskan cara menambal skrip XCode untuk menyiasati ini. Perhatikan bahwa ini adalah menambal XCode, jadi ini adalah versi spesifik, tetapi memperbaiki masalahnya.

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

GrumpyGary
sumber
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.

gbitaudeau
sumber
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.

pr1001
sumber