ipa 파일에 다시 서명하는 방법은 무엇입니까?


107

다른 프로비저닝 프로파일로 다음과 같은 IPA를 생성 한 후 프로비저닝 프로파일로 .ipa 파일에 어떻게 서명합니까? 베타 테스트를 위해 임시 프로비저닝 프로필로 IPA에 서명 한 다음 앱 스토어에 대한 앱 제출 프로비저닝 프로필로 정확한 IPA에 다시 서명하고 싶습니다.

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}"

답변:


207

명령 줄에서하는 것은 정말 쉽습니다. 나는 이것을하기위한 대본의 요지를 가지고 있었다. 이제 매일 사용하는 https://github.com/RichardBronosky/ota-tools 의 ipa_sign 스크립트에 통합되었습니다 . 이러한 도구 사용에 대해 궁금한 점이 있으면 주저하지 말고 물어보십시오.

핵심은 다음과 같습니다.

CODESIGN_ALLOCATE=`xcrun --find codesign_allocate`; export CODESIGN_ALLOCATE
IPA="/path/to/file.ipa"
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in keychain
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# sign with the new certificate (--resource-rules has been deprecated OS X Yosemite (10.10), it can safely be removed)
/usr/bin/codesign -f -s "$CERTIFICATE" Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload

새로 서명 된 앱은 resigned.ipa라고합니다.


31
하나의 질문이 아니라 7 개의 찬성표입니다. 내 배쉬가 그렇게 분명하다고 생각합니다.
Bruno Bronosky 2013

4
참으로 친절한 선생님입니다.
Rui Peres 2013 년

3
@RahmathullahMPulikkal 요점에서 경로를 잘못 하드 코딩 한 것을 봅니다. 요점 대신 github.com/RichardBronosky/ota-tools/blob/master/ipa_sign을 사용해야합니다 . 유지 관리 코드입니다.
Bruno Bronosky 2013 년

5
OS X Yosemite (10.10)에서 더 이상 사용되지 않는 --resource-rules 매개 변수에 대한 경고 / 오류가 발생할 수 있습니다.이 매개 변수를 삭제하면이 문제가 해결됩니다.
ıɾuǝʞ

4
참고 : CodeResources이제 폴더 내부 에있는 것처럼 보이 _CodeSignature므로 해당 폴더를 제거하기 만하면됩니다.
dadude999

36

이를 수행하는 방법에 대한 쉬운 도구는 iResign 을 확인하십시오 !

약간의 혼란 끝에 키 체인 인식 사임에 대한 해결책을 찾았습니다. https://gist.github.com/Weptun/5406993 에서 확인할 수 있습니다.


탈퇴하는 동안 번들 ID와 함께 표시 이름을 변경할 수있는 도구가 있습니까? 이것은 다른 환경에 대해 다른 표시 이름을 갖는 데 도움이됩니다. App-Dev, App-QA, App-Stage 등
Nishanth Nair 2013-04-15

1
예, floatsign.sh가 정확히 수행합니다.
Blitz 2013

공장. 간단하고 아름답습니다.
Arjun Kalidas

13

오래된 질문이지만 최신 XCode를 사용 codesign하면 쉽습니다.

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement

2
@Pavel이 질문은 iOS 6.x가 최신 버전 일 때 답변되었습니다. 그 이후로 두 가지 주요 릴리스가 있었는데, 이는 분명히 많은 것을 변경했습니다. 현재 기술을 대상으로하는 답변으로 검색을 제한 할 수 있습니다.
BryanH 2015-06-01

그것은 나를 위해 일했습니다. "my_certificate"를 키 체인의 키 이름으로 바꿔야합니다.
Franziskus Karsunke

2
codesign명령은 @BrunoBronosky 응답에도 사용됩니다. 나는 "* .ipa"파일에 직접 사용할 수 아니에요, 그리고 "-vv"항상 옵션을 반환 code object is not signed at all나는 그들이 알고 있다는 파일에 대한이 ... 서명
마리아노 Paniga을

12

여기에 게시 된 답변은 모두 저에게 효과적이지 않았습니다. 그들은 주로 임베디드 프레임 워크 서명 (또는 인 타이틀먼트 포함)을 건너 뛰었습니다.

다음은 나를 위해 일한 것입니다 (현재 디렉토리에 하나의 ipa 파일이 있다고 가정합니다).

PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in the keychain

unzip -q *.ipa
rm -rf Payload/*.app/_CodeSignature/

# Replace embedded provisioning profile
cp "$PROVISION" Payload/*.app/embedded.mobileprovision

# Extract entitlements from app
codesign -d --entitlements :entitlements.plist Payload/*.app/

# Re-sign embedded frameworks
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/Frameworks/*

# Re-sign the app (with entitlements)
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/

zip -qr resigned.ipa Payload

# Cleanup
rm entitlements.plist
rm -r Payload/

위의 게시물에서 유용한 댓글 (Rich) : stackoverflow.com/questions/5160863/…
Serzas

9

Fastlane의 한숨 은 IPA를 사임하는 데 상당히 강력한 솔루션을 제공합니다.

README에서 :

사임

ipa파일 을 생성 했지만 ipa 파일에 다른 코드 서명을 적용하려면 다음을 사용할 수 있습니다 sigh resign.

fastlane sigh resign

sigh 현재 폴더에있는 경우 ipa 파일 및 프로비저닝 프로파일을 찾습니다.

명령 줄을 사용하여 더 많은 정보를 전달할 수 있습니다.

fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"

중첩 된 애플리케이션에 대한 프로비저닝 프로파일 도 처리 합니다 (예 : watchkit 앱이있는 경우).


8

Sierra iMac에 대한 Bryan의 코드를 업데이트했습니다.

# this version was tested OK vith macOs Sierra 10.12.5 (16F73) on oct 0th, 2017
# original ipa file must be store in current working directory 

IPA="ipa-filename.ipa"
PROVISION="path-to.mobileprovision"
CERTIFICATE="hexadecimal-certificate-identifier" # must be in keychain
# identifier maybe retrieved by running: security find-identity -v -p codesigning

# unzip the ipa
unzip -q "$IPA"

# remove the signature
rm -rf Payload/*.app/_CodeSignature

# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision

# generate entitlements for current app
cd Payload/
codesign -d --entitlements - *.app > entitlements.plist
cd ..
mv Payload/entitlements.plist entitlements.plist

# sign with the new certificate and entitlements
/usr/bin/codesign -f -s "$CERTIFICATE" '--entitlements' 'entitlements.plist'  Payload/*.app

# zip it back up
zip -qr resigned.ipa Payload

i git the following error entitlements.plist : unrecognized blob type (accepting blindly) entitlements.plist : invalid length in entitlement blob
Amr Angry

자격 파일 콘텐츠를 공유 할 수 있습니까?
Pierre Priot 2017

매력처럼 일했다!
Luis E. Prado

5
  1. .zip으로 확장자를 변경하여 .ipa 파일의 압축을 풉니 다.
  2. 페이로드로 이동하십시오. .app 파일을 찾을 수 있습니다.
  3. .app 파일을 마우스 오른쪽 버튼으로 클릭하고 패키지 콘텐츠 표시를 클릭합니다.
  4. _CodeSigned폴더 삭제
  5. embedded.mobileprovision파일을 새 프로비저닝 프로파일로 교체하십시오.
  6. KeyChain Access로 이동하여 임시 프로필과 관련된 인증서가 있는지 확인하십시오.
  7. 아래 언급 된 명령을 실행합니다. /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. 이제 Payload 폴더를 다시 압축하고 .ipa로 .zip 확장자를 변경하십시오.

도움이 되었기를 바랍니다.

참조를 위해 아래 언급 된 링크를 따르십시오 : http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/


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