[iphone] IPA 재 서명 (iPhone)

현재 xcodebuild를 사용하고 xcrun을 사용하여 hudson으로 모든 응용 프로그램을 문제없이 빌드합니다.

다른 사람들로부터 회사 계정 대신 (앱 스토어 또는 임시 배포 용) 엔터프라이즈 계정으로 다시 서명하고 싶은 IPA 파일 몇 개를 받았습니다.

내 문제는 앱을 사임하려고 할 때 내 장치에 설치되지 않으며 엔터프라이즈 빌드이므로 설치해야한다는 것입니다. 오류 메시지는 iTunes가 아닌 장치에 있으며 단순히 앱을 설치할 수 없음을 나타냅니다. 더 이상 정보가 제공되지 않습니다.

일부 정보를 찾았습니다 ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for- 업로드 / )

그리고 이것은 가능할 것입니다. 내가 직면하고있는 문제는 일반적인 빌드 (xcrun 사용)에서와 같이 모바일 프로비저닝 프로파일을 포함하지 않는 것이 공동 디자인 도구로 제어 할 수 있거나 xcrun으로 다시 서명 할 수 있다는 것입니다 ?

내 사임 스크립트를 사용하여 현재

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

결과 ipa 파일을 살펴본 결과 원래 앱과 매우 유사한 것으로 보입니다. 여기서 어떤 파일을 변경해야합니까? 처음에는 _CodeSignature / CodeResources가 변경 될 것이라고 생각했지만 내용은 거의 동일하게 보입니다.

포인터는 매우 높이 평가됩니다.



답변

마침내이 일을했습니다!

프로비저닝 프로파일에 장치가 추가되지 않은 앱 스토어 제출을 위해 cert1로 서명 된 IPA로 테스트되었습니다. 사내 구축을 위해 엔터프라이즈 계정 및 모바일 프로비저닝 프로파일로 서명 된 새 IPA가 생성됩니다 (모바일 프로비저닝 프로파일이 IPA에 임베드 됨).

해결책:

IPA 압축 해제

unzip Application.ipa

오래된 CodeSignature 제거

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)을 받고 ideviceinstaller 를 사용하여 장치에서 앱을 설치하고 실행할 수 있다고 가정합니다. 예를 들어).

새로운 서명 자산 준비

첫 번째 단계는 설치 및 실행하려는 모든 장치가 포함 된 프로비저닝 프로파일 을 얻는 것 입니다. 프로파일에 키 체인 액세스에 설치 한 인증서가 포함되어 있는지 확인하십시오 (예 : iPhone 개발자 : 일부 본문 (XXXXXXXXXX)). 앱에 포함 된 프로파일을 바꿀 수 있도록 프로파일 (MyProfile.mobileprovision)을 다운로드하십시오.

다음으로 서명에 포함 할 자격 파일을 준비하겠습니다. 터미널을 열고 다음을 실행하십시오.

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

프로비져닝 프로필을 설명하는 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

기존 프로비저닝 프로파일 (예 : embedded.mobileprovision)을 자신의 프로파일로 바꿉니다.

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

이제 프로비저닝 프로파일에 포함 된 인증서와 이전에 작성한 entitlements.plist로 앱에 서명하십시오.

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

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

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

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

$ zip -qr MyApp-resigned.ipa Payload

끝난

Payload원래 앱 (MyApp.ipa)과 사직 버전 (MyApp-resigned.ipa)이 있으므로 디렉토리를 제거 할 수 있습니다 . 이제 프로비저닝 프로파일에 포함 된 모든 장치에 MyApp-resigned.ipa를 설치할 수 있습니다.


답변

나는이 대답을 성공적으로 따랐지만 자격이 변경되었으므로 --entitlements "Payload/Application.app/Entitlements.plist"두 번째에서 마지막 진술 의 일부를 간단히 제거하고 매력처럼 작동했습니다.


답변

Mac OS High Sierra 및 Xcode 10에서 확인

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

1) .ipa의 경로를 줘

2) 새로운 조항 프로파일

3) 자격 파일 (선택 사항, 자격이있는 경우에만 추가)

4) 번들 ID

5) 유통 증명서

다시 서명 한 후 출력 된 .ipa 파일이 저장된 것을 볼 수 있습니다

간단하고 강력한 도구


답변

이 사임 접근법 중 어느 것도 나를 위해 일하지 않았으므로 다른 것을 해결해야했습니다.

제 경우에는 만료 된 인증서가있는 IPA가있었습니다. 앱을 재 구축 할 수는 있었지만, 동일한 인증서 (새 인증서만으로)를 배포하기를 원했기 때문에 재 구축하고 싶지 않았습니다.

다른 답변에서 언급 한 사임 방식 대신 IPcode를 만드는 Xcode의 방법을 사용했습니다.이 방법은 빌드의 .xcarchive로 시작합니다.

  1. 기존 .xcarchive를 복제하고 내용을 바꾸기 시작했습니다. (.dSYM 파일을 무시했습니다.)

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

  3. 나는이 앱을 새로운 .xcarchive로 옮겼 Products/Applications습니다.

  4. 나는 Info.plist편집했다

    • ApplicationProperties/ApplicationPath
    • ApplicationProperties/CFBundleIdentifier
    • ApplicationProperties/CFBundleShortVersionString
    • ApplicationProperties/CFBundleVersion
    • Name
  5. .xcarchive를 보통 Xcode의 보관 폴더로 옮겼습니다 /Users/xxxx/Library/Developer/Xcode/Archives.

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

결과는 좋은 IPA였습니다.


답변

가장 쉬운 방법은 Fastlane을 사용하는 것입니다.

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


답변

Fastlane 한숨의 사임 옵션을 사용하면 매우 쉽게 할 수 있습니다.

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

명령 직전에 sigh를 사용하여 프로파일을 다운로드 할 수도 있습니다.