Xcode 7로 전환 한 후 앱 크기가 9MB에서 60MB로 증가했습니다. 해결 방법이 있습니까?


96

나는 엄청난 파일 크기 변경의 원인을 찾기 위해 Git 역사에서 거꾸로 갔지만, 내가 찾을 수있는 유일한 이유는 Xcode 6에서 Xcode 7 GM으로의 전환입니다.

릴리스 빌드 구성 .ipa아카이브 작업에서 생성 된 파일 크기의 상위 10 개 기여자 인 것으로 나타났습니다 .

$ unzip -lv Roger\ Release.ipa | sort -k +3nr | head
41802768  Defl:N 16887199  60%  09-14-15 23:47  dc24cdc1  Payload/Roger.app/Frameworks/libswiftCore.dylib
41802400  Defl:N 16886076  60%  09-06-15 18:33  f939ea6a  SwiftSupport/iphoneos/libswiftCore.dylib
11184032  Defl:N  5915625  47%  09-14-15 23:48  6ceac4a2  Payload/Roger.app/Roger
 6399584  Defl:N  2670275  58%  09-14-15 23:47  0ac52d3f  Payload/Roger.app/Frameworks/libPhoneNumber_iOS.framework/libPhoneNumber_iOS
 5410384  Defl:N  2334189  57%  09-14-15 23:47  7a8cb03f  Payload/Roger.app/Frameworks/Alamofire.framework/Alamofire
 4521904  Defl:N  2292789  49%  09-14-15 23:47  95da0882  Payload/Roger.app/Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit
 4731552  Defl:N  1926357  59%  09-14-15 23:48  e05337de  Payload/Roger.app/Frameworks/libswiftFoundation.dylib
 4731168  Defl:N  1925355  59%  09-06-15 18:33  19a5c3c4  SwiftSupport/iphoneos/libswiftFoundation.dylib
 2659232  Defl:N  1232897  54%  09-14-15 23:47  1a53a401  Payload/Roger.app/Frameworks/AFNetworking.framework/AFNetworking
 1196624  Defl:N   545343  54%  09-14-15 23:47  19a063cb  Payload/Roger.app/Frameworks/Bolts.framework/Bolts

지금까지 가장 큰 파일은 libswiftCore.dylib총 32MB가 넘는 두 개의 (약간 다른) 파일입니다. Xcode 6에서 빌드 한 번들에서이 두 파일은 총 3MB에 불과했습니다.

그래서 질문 # 1은 : 왜 Swift 코어 파일이 두 번 있습니까? ( Embedded Content Contains Swift Code is set to No ).

그리고 질문 # 2는 : 무슨 일이 있었나요? Swift 코어 크기가 15MB 증가한 이유는 무엇입니까? 영구적입니까?

몇 가지 추가 참고 사항 :

  • 이것은 완전히 Objective-C 이었지만 이제는 대부분 Swift 인 프로젝트입니다. 정의 모듈 설정이 설정되어 있음 .
  • 이 프로젝트는 use_frameworks!세트 가있는 CocoaPods를 사용 합니다.
  • 여러 장치 및 iOS 버전에서 TestFlight의 실제 다운로드 크기를 확인했으며 범위는 30 ~ 60MB입니다 (아마 차이는 앱 슬라이싱으로 인한 것임). 이전에는 9MB였습니다.

4
Xcode 7은 앱 슬라이싱을 사용하므로 다운로드 크기가 다를 가능성이 높으며 아마도 줄어들 것입니다. 나는 이것에 대해 걱정하지 않을 것입니다.
아담

6
@Adam : 이것은 사실이 아닙니다. 배포 된 버전은 기기에 따라 다르지만 지금까지 iPhone 5s에서 30MB , iPhone 6에서 60MB를 확인 했습니다. 설치 시간이 눈에 띄게 증가했습니다. 이것은 9MB 였을 때 확실히 걱정할 사항입니다.
Blixt 2015 년

3
실제로 30MB와 60MB 차이는 iPhone 5가 iOS 9.1에 있고 iPhone 6이 iOS 8에 있기 때문일 가능성이 큽니다.하지만 모든 앱 사용자가 iOS 9로 업그레이드 한 경우에도 30MB는 9에서 매우 크게 증가했습니다. MB.
Blixt 2015 년

2
TestFlight를 통해 배포 했습니까? 앱 씬닝은 Apple 서버에서 이루어 지므로 TestFlight / iTunes를 통해 설치하지 않으면 축소 된 크기를 볼 수 없을 것입니다.
MirekE 2015 년

2
TestFlight에 업로드 한 후 내 앱 크기가 74MB에서 9.6MB로 줄어들 었으니 걱정하지 마세요
Gintama

답변:


27

BitCode로 인해 발생했을 가능성이 높지만 App Store에서 배포 한 후에는 앱 크기가 실제로 증가하지 않았습니다.

앱과 다른 대상에서도 BitCode를 비활성화 할 수 있으며 축소가 표시되어야합니다.


Apple TestFlight에서 앱 다운로드 크기가 9MB가 아닌 30 ~ 60MB로 확인되었습니다. 아마도 동일한 배포 메커니즘을 사용하기 때문에 App Store에 게시되면 변경되지 않을 것이라고 생각합니다. Bitcode를 비활성화 해 보겠습니다.
Blixt 2015 년

빌드 및 게시 단계에서 비트 코드 및 디버그 기호를 사용하지 않도록 설정하고 빌드 버전을 보관하는 경우에도 libswiftCore.dylib각각 ~ 40MB (최대 16MB 압축) 의 정확히 동일한 두 파일이 포함됩니다 . TestFlight를 통해 전체 배포를 확인하지는 않았지만 이러한 거대한 파일은 여전히 ​​.ipa의 일부이기 때문에 파일 크기에 대한 기여도는 변경되지 않을 것입니다. 전체 크기가 약 10MB까지 줄어들 었으며, 이는 아마도 대부분 충돌 기호 지원을 제거했기 때문일 것입니다.
Blixt 2015-09-15

1
저는 개인적인 경험을하려고합니다. 제 .xcarchive는 Xcode7 이전 버전보다 훨씬 더 큽니다. 그러나 리소스 얇아 짐 등으로 인해 약간 작지 않은 경우에도 앱 스토어 다운로드는 여전히 동일한 크기입니다.
David Rothera

10
지금 살펴보면 TestFlight의 번들은 33MB이고 AppStore의 자체 동일한 빌드의 경우 10.5MB입니다. 이것은 TestFlight 빌드에서 얇게 처리되지 않았 음을 보여줍니다.
David Rothera 2015 년

알겠습니다. 좋습니다. 앱 스토어를 통해 앱을 실행하고 최선을 다하겠습니다!
Blixt 2015 년

19

나는 많은 설정과 조합을 테스트 해 왔으며 Xcode 7에서 만든 번들의 파일 크기는 기기와 iOS 버전에 따라 많이 달라지는 것 같습니다. 또한 TestFlight 빌드는 이제 이전에 비해 거대하지만 좋은 소식은 App Store에서 한 번 크게 증가하지 않았다는 것입니다 (이전에 비해 번들 크기에 약 1-2MB가 추가 된 것으로 보이지만). .

다음은 TestFlight, App Store 및 장치 간의 차이를 보여주는 몇 가지 샘플입니다.

iOS 9.1의 TestFlight, iPhone 5s
35.6 MB

iOS 8.4.1의 TestFlight, iPhone 6
70.1 MB

앱 스토어
11.8 MB

App Store 크기는 테스트 한 모든 장치에서 동일했습니다. iPhone 6 Plus에서 테스트하지는 않았지만 @ 3x 자산을 사용하기 때문에 번들 크기가 더 클 가능성이 매우 높습니다.


11

.xcarchive에서 .xcarchive 및 상점 배포를 위해 내보낼 때 비트 코드가 포함되어 있으므로 swift dylib의 크기와 자체 코드가 훨씬 더 커질 것으로 예상됩니다. 이 추가 크기는 실제로 사용자에게 제공되는 내용에 반영되지 않으므로 문제가되지 않습니다. 앱을 스토어에 제출하면 스토어에서 처리하여 비트 코드를 제거하고 처리 된 IPA 버전을 사용자가 다운로드합니다.

저장소 내보내기 (예 : 임시 배포를 위해 저장)를 제외하고 아카이브에서 모든 유형의 내보내기를 수행하는 경우 비트 코드를 로컬에서 제거합니다 (내보내기에서 해당 옵션을 선택한 상태로두면 비트 코드에서 바이너리를 먼저 다시 컴파일 할 수도 있음). 워크 플로, 스토어에서 일어날 일을 재현하기 위해) 앱이 실제로 얼마나 큰지 확인할 수 있습니다. TestFlight는 또한 비트 코드를 제거하고 실제 앱 크기를 보여줍니다.

https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html 에서 읽을 수있는 앱 씬닝을 통해 앱의 크기를 줄일 수도 있습니다. . 어쨌든 앱의 얇아진 각 변형의 크기를 확인하기 위해 임시 내보내기를 수행 할 수 있습니다.


6

임베디드 비트 코드가 그 이유입니다.

ENABLE_BITCODE를 비활성화하지 않으려면 디버그 기호를 제거 할 수 있습니다.

http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html 을 참조하십시오. 비트 코드를 포함하기 전에 디버그 기호를 제거하는 것이 가능한 옵션 중 하나입니다.


1
그것은 상징적 인 충돌 보고서를받지 못한다는 뜻이 아닙니까?
Iulian Onofrei

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