[ios] iOS 8의 엔터프라이즈 앱 업데이트 배포

itmsURL을 통해 배포하는 엔터프라이즈 앱이 있습니다 .

itms-services://?action=download-manifest&url=itms-services://?action=download-manifest&url=https://$MY_PLIST_URL.plist

iOS 7에서는 다운로드와 업데이트가 모두 정상적으로 작동합니다. 그러나 iOS 8에서는 오류가 발생합니다.

LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.mycom.MyApp

내 plist에서 나는

<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>

iOS 8의 내 앱에서 버전 0.2.1을 실행하고 있습니다.



답변

우리 앱 배포에서도이 문제가 발생했습니다. 우리는 ipa 번들 식별자를 동일하게 유지하면서 다운로드 배포에 사용하는 .plist 내의 번들 식별자를 ‘위조’하여이 문제를 해결할 수있었습니다.

예를 들어, plist에서 :

<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>

com.mycom.MyAppcom.mycom.MyApp.ios8fix로 변경하십시오.

앱은 새로운 앱 아이콘을 사용하여 설치되며 설치 후 사라집니다.

이미 앱을 설치 한 경우 설치 중에 새 앱 아이콘도 표시됩니다. 설치 후이 아이콘은 사라지지만 기존 버전의 앱이 업데이트됩니다. 새로 설치하면 설치 아이콘이 사라지고 설치된 응용 프로그램 아이콘이 제자리에 나타납니다.

iOS 8이 번들 식별자를 캐싱하고 요청 된 설치를 이러한 캐시 된 설치와 비교하는 것 같습니다. 대부분의 경우 설치를 요청하는 팝업 만 표시되지만 아무 일도 일어나지 않습니다.

Sean이 이미 알아 차렸 듯이 이것은 xCode 6 GM과 공식 iOS 8 버전에서 나타납니다. 이전에 애플리케이션을 설치 한 적이없는 기기는 앱 설치에 문제가 없습니다.


답변

이것은 나를 위해 더 잘 작동했으며 매니페스트 또는 기타 속임수를 만질 필요가 없습니다 ( plist자동 생성 되는 Xcode Server에 적합 ).

  1. iExplorer 다운로드 ( http://www.macroplant.com/iexplorer/ )
  2. 장치 연결
  3. “미디어> 다운로드”에서 모든 파일을 삭제합니다.
  4. 장치 다시 시작

이렇게하면 기기 캐시가 재설정되므로 이제 평소처럼 앱을 설치할 수 있습니다.


답변

나는 같은 문제가 있습니다. 나는 그것을 다음과 같이 재현했다.

1) iOS 7에서 iOS 8 GM으로 업그레이드하는 동안 내 애플리케이션 설치

2) iOS 8에서 제거

3) itms-services를 통해 설치 시도 : 동일한 번들 이름으로

서버 plist (응용 프로그램 Info.plist가 아님)에서 번들 식별자를 변경하려고했을 때 작동했습니다 (응용 프로그램이 다운로드되고 “그림자”아이콘이 남아 있지 않음). 그러나 그것은 사과 벌레처럼 보입니다.


답변

허용되는 솔루션은 더 이상 iOS9에서 작동하지 않습니다.

내 이해는 Apple이 임시 바이너리가 App Store에서 다운로드 한 스톡 앱이나 앱을 대체하는 것을 방지함으로써 심각한 iOS 보안 허점을 막았다는 것입니다. 배경에 대해서는이 문서를 참조하십시오 (CVE-2015-3722 / 3725 및 CVE-2015-3725).

https://www.fireeye.com/blog/threat-research/2015/06/three_new_masqueatt.html

보안 의미를 고려할 때이 동작이 향후 IOS 버전에서 변경 될 것으로 예상하지 않습니다. 대체 옵션은 다음과 같습니다.

  • 애드혹을 설치하기 전에 App Store 버전을 삭제하십시오.
  • 앱과 배포 plist 모두에서 번들 ID를 변경하여 임시를 ‘새’앱으로 배포합니다.
  • TestFlight 사용

답변

Gil이 말한 것은 옳은 것 같지만 더 구체적으로는 server.plist에서 번들 버전 문자열을 증가시켜야한다는 것을 발견했습니다.

    <key>bundle-version</key>
    <string>3.2.2</string>

최소한 OTA 설치를 수행 할 수 있습니다.

(죄송합니다 … 댓글에 추가했을 텐데 저는 너무 많은 n00b입니다.)


답변

이상 살펴보세요 이 답변 하고 이 답변을 .

해킹없이이 문제를 해결할 수 있습니다. iOS8 assets의 경우 매니페스트 .plist파일 display-imagefull-size-image키 의 키에 포함해야 합니다. 엔터프라이즈 및 애드혹 배포 용 아카이브를 저장할 때 Xcode 5에서 사용할 수 있었지만 필수는 아닙니다.

install-manifet.plist 파일에 대한 템플릿으로 github에 요점을 만들었습니다 .


답변

이것은 iOS8 Beta5에서 처음 발견 된 버그입니다. 그리고 그것은 GM 시드와 공식 iOS8.0 버전에서 여전히 Apple에 의해 수정되지 않았습니다. 더 많은 토론은 여기 에서 찾을 수 있습니다 .

직접 테스트중인 현재 해결 방법 :

  • 장치의 내용을 신경 쓰지 않는 경우 : 장치의 DFU 모드에서 클린 복원을 수행하십시오.
  • 물건을 돌려 받고 싶다면
    1. 복원하기 전에 iTunes에서 iOS 장비 백업 (Ad-Hoc / enterprise 앱 없음)
    2. 장치를 깨끗하게 복원 한 후 Ad-Hoc / enterprise 앱을 설치하십시오.
    3. iTunes에서 백업 복원
    4. 이제 해당 애드혹 / 엔터프라이즈 앱을 자유롭게 삭제하고 다시 설치할 수 있습니다.