programing

IPA 재서명(iPhone)

mailnote 2023. 7. 5. 20:55
반응형

IPA 재서명(iPhone)

저는 현재 모든 애플리케이션을 xcodebuild를 사용하여 허드슨으로 구축한 후 문제 없이 xcrun을 사용하고 있습니다.

다른 사람들로부터 회사 계정(앱 스토어용 또는 때때로 애드혹 배포용)이 아닌 엔터프라이즈 계정으로 재서명하려는 IPA 파일을 몇 개 받았습니다.

문제는 앱을 종료하려고 할 때 장치에 설치되지 않는다는 것입니다(엔터프라이즈 빌드이므로 설치해야 함).오류 메시지가 장치(iTunes가 아님)에 표시되고 앱을 설치할 수 없음을 간단히 알려줍니다.더 이상의 정보는 제공되지 않습니다.

몇 가지 정보를 찾았습니다. ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/ )

그리고 이것은 가능할지도 모릅니다.제가 직면한 문제는 일반 빌드(xcrun 사용)에서 하는 것처럼 모바일 프로비저닝 프로필이 내장되어 있지 않은 것 같습니다. 코드 서명 도구로 제어할 수 있습니까? 아니면 xcrun으로 재서명할 수 있습니까?

사직 스크립트를 사용하여 현재 수행하고 있습니다.

  • app.ipa 압축을 풉니다.
  • appname=$(ls 페이로드)
  • xcrun -sdk iphoneos PackageApplication -s "$provisioning_profile" "$project_dir/Payload/$appname" -o "$provisioning_dir/app-resigned.ipa" --sign "$provisioning_profile" --embed "$mobileprovision"

결과로 나온 ipa 파일을 찾아보니 원래 앱과 매우 유사한 것 같습니다.여기서 실제로 변경해야 하는 파일은 무엇입니까?처음에는 _CodeSignature/CodeResources가 변경될 것이라고 생각했지만 내용은 거의 동일하게 보입니다.

포인터는 정말 감사합니다.

드디어 작동했습니다!

프로비저닝 프로파일에 디바이스가 추가되지 않은 상태에서 앱스토어 제출을 위해 cert1로 서명된 IPA로 테스트했습니다.결과적으로 사내 구축을 위해 엔터프라이즈 계정과 모바일 프로비저닝 프로파일로 서명된 새로운 IPA가 생성됩니다(모바일 프로비저닝 프로파일이 IPA에 포함됨).

솔루션:

IPA 압축 풀기

unzip Application.ipa

이전 코드 서명 제거

rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null || true

내장된 모바일 프로비저닝 프로파일 교체

cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"

재계약

/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

재포장

zip -qr "Application.resigned.ipa" Payload

편집: Entitlement 부분을 제거했습니다(골목 설명 참조, 감사합니다).

이 질문에 대한 대답은 약간 구식이며 잠재적으로 주요 단계가 누락되어 있으므로 이는 외부 개발자의 앱 설치를 위한 업데이트된 가이드입니다.

iOS 앱을 재서명하는 방법 ------

예를 들어, 다른 개발자로부터 앱(예: MyApp.ipa)을 받은 경우 ide 장치 설치 프로그램을 사용하여 해당 앱을 장치에 설치하고 실행할 수 있어야 합니다.

새 서명 자산 준비

첫 번째 단계는 설치하고 실행하려는 모든 장치가 포함된 프로비저닝 프로파일을 얻는 것입니다.프로필에 Keychain Access에 설치한 인증서가 포함되어 있는지 확인합니다(예: iPhone Developer:Some Body(XXXXXXXXXX).앱에 포함된 프로필을 교체할 수 있도록 프로필(MyProfile.mobileprovision)을 다운로드합니다.

다음으로, 우리는 서명에 포함할 자격 파일을 준비할 것입니다.터미널을 열고 다음을 실행합니다.

$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist

그러면 Provisioning Profile을 설명하는 xml 파일이 생성됩니다.그런 다음 사용 권한을 파일로 추출합니다.

$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

프로비저닝 프로파일 교체 및 애플리케이션 다시 사용

.ipa 파일로 작업하는 경우 먼저 앱의 압축을 풉니다(대신 .app이 있는 경우 이 단계를 건너뛸 수 있습니다).

$ unzip MyApp.ipa

작업 에 이제작디에다포내다니함됩이용이 포함됩니다.Payload/그리고.Payload/MyApp.app/그런 다음 이전 코드 서명 파일을 제거합니다.

$ rm -rf Payload/MyApp.app/_CodeSignature

기존 프로비저닝 프로파일(예: membedded.mobile provision)을 사용자의 프로비저닝 프로파일로 교체합니다.

$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision

중요: 또한 앱에 포함된 모든 프레임워크를 포기해야 합니다.다음에서 확인할 수 있습니다.Payload/MyApp.app/Frameworks앱이 Swift로 작성되었거나 추가 프레임워크가 포함된 경우 이를 취소해야 합니다. 그렇지 않으면 앱이 설치되지만 실행되지 않습니다.

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*

이제 프로비저닝 프로필에 포함된 인증서와 사용 권한으로 앱에 서명합니다.이전에 만든 목록입니다.

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app

이제 앱을 다시 압축할 수 있습니다.

$ zip -qr MyApp-resigned.ipa Payload

다 했어요.

이제거수있다니습을 할 수 .Payload원본 앱(MyApp.ipa)과 사직한 버전(MyApp-resigned.ipa)이 있으므로 디렉터리를 확인하십시오.이제 프로비저닝 프로필에 포함된 모든 장치에 MyApp-resigned.ipa를 설치할 수 있습니다.

가장 쉬운 방법은 Fastlane을 사용하는 것이라고 생각합니다.

sudo gem install fastlane -NV
hash -r # for bash
rehash # for zsh
fastlane sigh resign ./path/app.ipa --signing_identity "Apple Distribution: Company Name" -p "my.mobileprovision"

이 답변을 성공적으로 따랐지만 자격이 변경되었기 때문에 간단히 제거했습니다.--entitlements "Payload/Application.app/Entitlements.plist"두 번째에서 마지막 진술의 일부, 그리고 그것은 매력적으로 작동했습니다.

Mac OS High Sierra 및 Xcode 10으로 확인

애플리케이션 iResign을 사용하여 동일한 것을 간단하게 구현할 수 있습니다.

경로를 1).ipa로 지정합니다.

새 프로비저닝 프로필

사용 권한 파일(선택 사항, 사용 권한이 있는 경우에만 추가)

번들 ID

배포 인증서

재서명 후 저장된 output .ipa 파일을 볼 수 있습니다.

간편하고 강력한 도구

2020년에, 나는 그것을 Fastlane과 함께 했습니다.

다음은 제가 사용한 명령입니다.

$ fastlane run resign ipa:"/Users/my_user/path/to/app.ipa" signing_identity:"iPhone Distribution: MY Company (XXXXXXXX)" provisioning_profile:"/Users/my_user/path/to/profile.mobileprovision" bundle_id:com.company.new.bundle.name

전체 문서 여기서 - https://docs.fastlane.tools/actions/resign/

이러한 사임 방법은 저에게 효과가 없었습니다. 그래서 저는 다른 방법을 생각해내야 했습니다.

저의 경우, 인증서가 만료된 IPA를 가지고 있었습니다.앱을 다시 빌드할 수도 있었지만, 동일한 버전(새 인증서만 있으면)을 배포하고 싶었기 때문에 다시 빌드하고 싶지 않았습니다.

다른 답변에서 언급한 사임 방법 대신 빌드에서 .xarchive로 시작하는 Xcode의 IPA 생성 방법으로 방향을 틀었습니다.

  1. 기존 .xarchive를 복제하여 내용을 교체하기 시작했습니다.(.dSYM 파일을 무시했습니다.)

  2. 이전 IPA 파일에서 이전 앱을 추출했습니다(지핑 해제를 통해, 앱은 Payload 폴더에 있는 유일한 것입니다).

  3. 는 이 로새앱운로이이동다습니했을.Products/Applications거기 있던 앱을 교체하는 것.

  4. 편집했습니다.Info.plist

    • ApplicationProperties/ApplicationPath
    • ApplicationProperties/CFBundleIdentifier
    • ApplicationProperties/CFBundleShortVersionString
    • ApplicationProperties/CFBundleVersion
    • Name
  5. 했습니다. 보통 .xarchive Xcode는 .xarchive Xcode입니다./Users/xxxx/Library/Developer/Xcode/Archives.

  6. Xcode에서 Organizer 창을 열고 새 아카이브를 선택한 다음 정기적으로(이 경우 Enterprise) 내보내기를 수행했습니다.

결과는 작동하는 좋은 IPA였습니다.

Fastlane seaugh의 사임 옵션으로 당신은 이것을 매우 쉽게 할 수 있습니다.

sigh resign -p <path-to-profile-with-mobileprovision-ext> -i <code-sighning-identity-of-your-app>

명령 직전에 한숨을 사용하여 프로필을 다운로드할 수도 있습니다.

모든 솔루션을 시도해 보았지만 마침내 이러한 명령으로 리시파를 생성할 수 있습니다.

인증서 다시 서명

  • *는 ipa 이름이며 앱 이름 $PROVISION은 프로비저닝 프로파일의 경로입니다. $CERTIFILATE는 키 체인 전체 이름의 인증서 이름입니다(인증서를 두 번 클릭할 때 공통 이름).
  1. 재서명 인증서를 사용하여 새 ipa를 생성할 디렉토리로 이동합니다. 모든 파일을 ipa, 인증서 및 모바일 프로비저닝에 붙여넣고 인증서도 설치하십시오.

  2. security cms -D -i 경로/to/MyProfile.mobileprovision > provision.plist(이 명령을 호출하고 모바일 프로비저닝을 파일의 경로로 대체)

  3. /usr/libexec/PlistBuddy -x -c 'Print:Entitlements' 프로비저닝.plist > 자격.plist(이 명령을 실행합니다)

  4. unzip -q *.ipa

  5. rm -rf 페이로드/*.app/_코드 서명/

  6. /usr/libexec/PlistBuddy Payload/*.app/Info.plist(이 명령 이후에 번들 ID를 변경할 필요가 없으면 새 번들 ID를 추가해야 합니다. 그러면 이 세 단계를 무시할 수 있습니다.)

7.  Set :CFBundleIdentifier “com.mycompany.newbundleidentifier” (This should be new bundle ID)
8.  save
9.  quit
  1. cp $PROVISION 페이로드/*.app/embedded.mobileprovision

  2. codesign -d --complements :complements.plist Payload/*.app/ (앱이 작동하지 않으면 이 명령을 무시하고 다음에 이 명령을 사용하십시오.)

  3. codesign -f -s "$CERTIFICATE" --itlements 자격.plist 페이로드/.app/프레임워크/

  4. codesign -f -s "$CERTIFICATE" --itlements 자격.플리스트 페이로드/*.app/

  5. zip -qr이 사직했습니다.ipa 페이로드

https://stackoverflow.com/a/37172815 https://stackoverflow.com/a/50392448 https://coderwall.com/p/qwqpnw/resign-ipa-with-new-cfbundleidentifier-and-certificate

만약 당신의 APP가 Flutter 도구를 사용하여 만들어진다면, 검토해 보세요.codesign모든 포드 확장에 대한 정보:

codesign -d --verbose=4 Runner.app/Frameworks/xxx.framework |& grep 'Authority='

결과는 팀의 이름이어야 합니다.

아래 셸 스크립트를 실행하여codesign모든 확장명:

IDENTITY=<prefix of Team ID number>
ENTITLEMENTS=<entitlements.plist>
find Payload/Runner.app -type d -name '*framework' | xargs -I '{}' codesign -s $IDENTITY -f --entitlements $ENTITLEMENTS {} 

그리고 마지막으로 잊지 마세요.codesignRunner.app그 자체로

XReSign 앱(간단한 GUI 도구)을 사용하여 ipa를 재서명할 수 있습니다. 엔터프라이즈 배포 앱 재서명에 사용했고 잘 작동했습니다.

https://github.com/xndrs/XReSign

필요한 것은

  1. 사임할 것을 맹세합니다
  2. 모바일 제공
  3. 사용 권한(사용 권한을 생성하려면 아래 단계를 확인하십시오.)
  4. 기업용 배포 인증서

사용 권한 생성하기

터미널 열기

$ security cms -D -i "your_path/Enterprise_Distribution.mobileprovision" > provision.plist

그리고나서

$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

감사해요.

확장자 및/또는 watch 앱이 있는 앱이 있고 각 확장자/watch 앱에 대한 프로비저닝 프로파일이 여러 개인 경우 이 스크립트를 사용하여 ipa 파일에 다시 서명해야 합니다.

Github에서 스크립트 재서명

다음은 이 스크립트를 사용하는 방법의 예입니다.

./resign.sh YourApp.ipa "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision -p <path_to_provisioning_profile_for_watchkitapp>.mobileprovision -p <path_to_provisioning_profile_for_todayextension>.mobileprovision  resignedYourApp.ipa

다른 -p 옵션과 함께 추가하여 다른 확장 프로비저닝 프로파일도 포함할 수 있습니다.

모든 프로비저닝 프로필이 동일한 인증서/서명 ID로 서명되었습니다.

언급URL : https://stackoverflow.com/questions/6896029/re-sign-ipa-iphone

반응형