IPA 빌드 중 Xcode 6.1 오류


140

오늘 Xcode 6.1로 업그레이드하여 다음을 추측하십시오. 이제 TestFlight 데스크탑 앱을 사용하여 빌드를 제출하는 데 문제가 있습니다. 앱이 IPA 빌드를 시작하는 동안 발생하는 오류는 다음과 같습니다.

오류

오류 : / usr / bin / codesign --force --preserve-metadata = 식별자, 권한, 리소스 규칙 --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tmp /QYFSJIvu7W/Payload/XX.app가 오류 1과 함께 실패했습니다. 출력 : 경고 : 옵션 "resource-rules"와 함께 --preserve-metadata를 사용합니다 (Mac OS X> = 10.10에서는 더 이상 사용되지 않음)! 경고 : --resource-rules는 Mac OS X> = 10.10에서 더 이상 사용되지 않습니다! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist : 자원을 읽을 수 없습니다

'지원 기사'는 무슨 일이 일어나고 있는지 전혀 모릅니다.

xcrun 또는 유사한 도구를 사용하는 Jenkins와 같은 CI 환경에서 동일한 문제가 발생하기 때문에 TestFlight 문제가 아닌 것 같습니다.

앱은 몇 달 동안 업데이트되지 않았으므로 곧 업데이트를 기대하지 않아도됩니다. 그것은 나와 저의 고객들에게 정말 효과가 있었기 때문에 다른 것을 위해 그것을 포기하는 데 정말로 열중하지 않았습니다.

이 오류에 대한 아이디어와 해결 방법은 매우 감사하겠습니다.


4
다음과 같이 xcrun 명령을 사용하여 CI 환경에서 동일한 문제가 발생하므로 TestFlight 문제가 아닌 것 같습니다 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
감사! 솔직히 나는 그것이 왜 효과가 있는지는 신경 쓰지 않습니다. :) 지난 몇 달 동안 애플이 끔찍한 조업으로 돌파 한 최신작. 어쨌든 솔루션을 지적 해 주셔서 감사합니다. (그리고 나를 위해 downvote 철저하게 게시하기 전에 오류를보고 있지 용)
— Şafak 게셀

10
CODE_SIGN_RESOURCE_RULES_PATH는 스크립트 또는 명령 줄을 통해 xcodeproj 설정을 편집하는 경우 변수 이름입니다. developer.apple.com/library/ios/recipes/…
— roblocop

5
Code Signing Resource Rules Path빌드 설정에서 볼 수 없습니다 . 어떤 생각?
— Georg

7
기본 설정이 아닌 모두를 선택했는지 확인하십시오 ( "일반, 기능, 정보, 빌드 설정 등"아래 행)
— AS

분명히이 앱은 거부 얻을 것이다 : stackoverflow.com/questions/26488077/...
— 글렌 메이 나드에게

61

PackageApplications에 대한 다음 패치가 나를 위해 수정했습니다 .10.10에서 더 이상 사용되지 않는다고 리소스 규칙을 제거했습니다.

Testflight는 그것없이 작동합니다. 앱 스토어도 빌드합니다.

/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 이제 iOS 용 내 파이썬 응용 프로그램을 빌드
— 이안 엘리스

대박! 고마워요 :) 위의 "코드 서명 리소스 규칙 경로"설정으로 문제가 해결되지 않았지만이 답변은 모든 프로젝트에서 전역 적으로 적용됩니다. :)
— Pellet

@IanEllis : PackageApplication에서 "resource-rules"매개 변수를 어떻게 제거했는지 알려주십시오. 큰 도움이 될 것입니다 !!
— Rashmi Ranjan mallick

8
다음은 PackageApplication을 수정하는 oneliner입니다. perl -p -i'Orig '-e'BEGIN {undef $ /;} s /, resource-rules (. * sign}). * ResourceRules.plist "/ $ 1 / smg '"/ Applications / Xcode6.1.1.app / Contents / Developer / Platforms / iPhoneOS.platforms / 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
Xcode로 .ipa를 만들고 데스크톱 앱을 통해 업로드하는 것이 효과적이었습니다.
— livingtech

@livingtech 예, 그러나 나는 또한 "원하는 프로파일을 선택하는 대신 새로운 프로파일을 생성하는 Xcode"라는 버그를 겪었습니다.
— helmesjo

10

Xcode 7 릴리스 이후 Tim Gostony 의 답변 이 더 이상 작동하지 않습니다. 이제 자원 규칙이 있으면 App Store 제출 프로세스가 실패합니다. 해결책은 코드 서명 자원 규칙 경로를 지우고 xcrun을 xcodebuild 도구로 바꾸는 것입니다.

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

임시 배포 ipa 파일을 내보내는 가장 간단한 Options.plist는 다음과 같습니다.

<?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 파일에 사용할 수있는 비트 코드, 앱 씬닝 등의 다른 옵션이 있습니다. 따라서 xcodebuild 도구가 iOS 9 이상의 ipa 파일을 내보내는 데 적합한 도구라고 생각합니다.

옵션 plist에 대한 자세한 내용은 xcodebuild -help 명령을 통해 사용할 수 있습니다.


Vladimir 덕분에 Xcode 7 제출과 충돌하는 방식에 대해 혼란스러워했습니다.
— kevinl

xcrun을 정확히 어떻게 대체합니까? Jenkins Xcode 플러그인에서 해당 설정을 볼 수 없습니다 :(
— Hlung

2

SDKROOT 패치를 사용해도 XCode 6.4가있는 Yosemite에서는 공동 디자인이 실패합니다. 다음 기사에서는이 문제를 해결하기 위해 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});

내가 생각하는 대답 은 사용 아카이브가있는 경우 블라디미르 Grigorov에서이 최고입니다 :

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

내 경우에는 빌드 후 응용 프로그램을 수정하고 번들 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>"

.mobileprovision로 서명하기 위해 파일 을 포함시키는 것을 잊지 마십시오 cp.


0

다른 답변에 지정된대로 서명 할 배포 인증서 만 지정할 수 없으며 올바르게 패키지됩니다. 이를 위해 TestFlight는 앱을 업데이트해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.