Xcode 7 पर स्विच करने के बाद, ऐप का आकार 9 एमबी से बढ़कर 60 एमबी हो गया, क्या कोई फिक्स है?


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फाइलें हैं, जिनकी कुल संख्या 32 एमबी है। Xcode 6 द्वारा निर्मित बंडल में इन दो फ़ाइलों का कुल योग केवल 3 MB है।

तो प्रश्न # 1 है: स्विफ्ट कोर फाइलें दो बार क्यों होती हैं? ( एंबेडेड सामग्री सम्मिलित है स्विफ्ट कोड के लिए सेट है नहीं )।

और प्रश्न # 2 है: क्या हुआ? स्विफ्ट कोर का आकार 15 एमबी क्यों बढ़ गया? क्या यह स्थायी है?

कुछ अतिरिक्त नोट:

  • यह एक ऐसा प्रोजेक्ट है जो पूरी तरह से ऑब्जेक्टिव-सी था लेकिन अब ज्यादातर स्विफ्ट है। परिभाषित करता है मॉड्यूल स्थापित करने के लिए सेट है हाँ
  • परियोजना use_frameworks!सेट के साथ कोकोआपोड्स का उपयोग करती है ।
  • मैंने कई उपकरणों और iOS संस्करणों पर TestFlight से वास्तविक डाउनलोड आकार की पुष्टि की है और यह 30-60 एमबी की सीमा में है (संभवतः अंतर ऐप स्लाइसिंग के कारण है)। यह 9 एमबी का हुआ करता था।

4
Xcode 7 ऐप स्लाइसिंग का उपयोग करता है, डाउनलोड का आकार सबसे अधिक भिन्न होगा, यह संभवतः भी घट जाएगा। मुझे इसकी चिंता नहीं होगी।
एडम

6
@ एडम: यह मामला नहीं है। डिवाइस के आधार पर परिनियोजित संस्करण अलग-अलग होता है, लेकिन अभी तक मैंने iPhone 5s पर 30 MB और iPhone 6 पर 60 MB देखा है। स्थापना समय में उल्लेखनीय वृद्धि हुई है। यह निश्चित रूप से चिंता का विषय है जब यह 9 एमबी हुआ करता था।
ब्लिक्स

3
वास्तव में 30 बनाम 60 एमबी का अंतर सबसे अधिक संभावना है कि आईफोन 5 आईओएस 9.1 पर और आईफोन 6 आईओएस 8 पर है। लेकिन फिर भी अगर सभी ऐप यूजर्स आईओएस 9 में अपग्रेड होते हैं, तो भी 30 एमबी 9 से बहुत बड़ी वृद्धि है। एमबी।
ब्लिक्स

2
क्या आपने टेस्टफलाइट के माध्यम से तैनाती की? ऐप थिनिंग ऐप्पल सर्वर पर किया जाता है, इसलिए जब तक आप टेस्टफलाइट / आईट्यून्स के माध्यम से इंस्टॉल नहीं करते हैं, आप कम आकार को नहीं देख पाएंगे, मुझे लगता है।
मिरके

2
TestFlight पर अपलोड करने के बाद, मेरे ऐप का आकार 74MB से कम होकर 9.6MB हो गया है, इसलिए चिंता न करें
Gintama

जवाबों:


27

बिटकॉइड के कारण सबसे अधिक संभावना है, मैंने एक ही वृद्धि देखी है लेकिन एक बार ऐप स्टोर से तैनात होने के बाद ऐप का आकार वास्तव में नहीं बढ़ा है।

आप अपने ऐप में बिटकोड को और अन्य लक्ष्यों को भी अक्षम कर सकते हैं और आपको एक संकोचन देखना चाहिए।


मैंने ऐप्पल टेस्टफ़लाइट से ऐप डाउनलोड साइज़ 9 एमबी के बजाय 30 से 60 एमबी होने की पुष्टि की है। मुझे नहीं लगता कि यह एक बार ऐप स्टोर पर बदल जाएगा क्योंकि वे संभवतः समान वितरण तंत्र का उपयोग करते हैं। मैं बिटकोड को अक्षम करने का प्रयास करूंगा।
ब्लिक्स

बिटकोड और डिबग सिंबल्स को बिल्ड और पब्लिशिंग स्टेप्स में डिसेबल करना और बिल्ड वर्जन को आर्काइव करना अभी भी libswiftCore.dylib~ 40 एमबी प्रत्येक (~ 16 एमबी कंप्रेस्ड) में ठीक उसी दो फाइल को शामिल करता है । मैंने TestFlight के माध्यम से पूरी तैनाती की पुष्टि नहीं की है, लेकिन चूंकि ये विशाल फाइलें अभी भी .ipa का हिस्सा हैं, मुझे संदेह है कि फ़ाइल आकार में उनके योगदान में बदलाव होगा। कुल मिलाकर आकार ~ 10 एमबी से सिकुड़ गया, जो संभवतः दुर्घटना प्रतीक समर्थन लेने से है।
ब्लिक्स

1
मैं व्यक्तिगत अनुभव से दूर जा रहा हूं, मेरे .xcarchive पहले के Xcode7 की तुलना में अब बहुत बड़े हैं, हालांकि ऐप स्टोर डाउनलोड अभी भी एक ही आकार का है अगर संसाधन पतले होने के कारण थोड़ा छोटा नहीं है आदि
डेविड रोथरा

10
अभी देख रहे हैं, TestFlight से बंडल 33MB था और AppStore पर स्वयं के निर्माण के लिए यह 10.5MB है, इससे पता चलता है कि TestFlight बिल्ड पर थिनिंग नहीं किया गया है।
डेविड रोता

ठीक है, यह जानना अच्छा है। मैं ऐप स्टोर के माध्यम से चलाऊंगा और सर्वश्रेष्ठ के लिए आशा करूँगा!
ब्लिक्स

19

मैं बहुत सारी सेटिंग्स और संयोजनों का परीक्षण कर रहा हूं और ऐसा लगता है कि Xcode 7 द्वारा निर्मित बंडलों का फ़ाइल आकार डिवाइस और iOS दोनों के संस्करण के आधार पर बहुत भिन्न होता है। इसके अलावा, TestFlight बिल्ड अब पहले की तुलना में बहुत बड़े हैं, लेकिन अच्छी खबर यह है कि एक बार ऐप स्टोर पर बहुत अधिक वृद्धि नहीं हुई है (हालांकि मैं पहले की तुलना में बंडल आकार में जोड़ा गया 1-2 एमबी देख रहा हूं) ।

TestFlight, App Store और उपकरणों के बीच भिन्नता दिखाने के लिए यहां कुछ नमूने दिए गए हैं:

TestFlight, iOS 9.1
35.6 MB पर iPhone 5s

TestFlight, iOS 8.4.1
70.1 MB पर iPhone 6

ऐप स्टोर
11.8 एमबी

ऐप स्टोर का आकार मेरे द्वारा परीक्षण किए गए सभी उपकरणों पर समान था। मैंने iPhone 6 Plus पर इसका परीक्षण नहीं किया है, हालांकि, यह बहुत संभव है कि @ 3x संपत्ति का उपयोग करने के बाद से बंडल का आकार बड़ा हो।


11

यह उम्मीद की जाती है कि स्विफ्ट डाइलिब्स का आकार, और आपका अपना कोड, .xcarchive में काफी बड़ा होगा, और जब आप बिटकॉइन को शामिल करने के कारण स्टोर वितरण के लिए निर्यात करते हैं। यह अतिरिक्त आकार वास्तव में आपके उपयोगकर्ताओं को वितरित किए जाने पर प्रतिबिंबित नहीं होगा, इसलिए यह एक समस्या नहीं होनी चाहिए। जब आप अपने ऐप को स्टोर में जमा करते हैं, तो स्टोर इसे बिटकॉइन को हटाने की प्रक्रिया करेगा, और आईपीए का वह प्रोसेस्ड वर्जन है जिसे आपके उपयोगकर्ता डाउनलोड करेंगे।

यदि आप अपने संग्रह से किसी भी प्रकार का निर्यात करते हैं, एक स्टोर निर्यात (जैसे कि तदर्थ तैनाती के लिए बचत) को छोड़कर, तो हम स्थानीय रूप से बिटकोड से बाहर पट्टी करेंगे (और यहां तक ​​कि बिटकॉइन से अपने बायनेरिज़ को पहले से हटा दें, यदि आप निर्यात में चेक किए गए उस विकल्प को छोड़ देते हैं। वर्कफ़्लो, स्टोर पर क्या होगा) को फिर से बनाने के लिए, ताकि आप देख सकें कि आपका ऐप वास्तव में कितना बड़ा होगा। TestFlight आपके लिए बिटकोड भी छोड़ेगी और आपको अपना सही ऐप साइज़ दिखाएगी।

आपको यह भी पता होना चाहिए कि ऐप थिनिंग के माध्यम से आपके ऐप का साइज़ भी कम किया जा सकता है, जिसके बारे में आप https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGide/Introduction/Introduction.html पर पढ़ सकते हैं । आप संभवतः वैसे भी अपने ऐप के प्रत्येक पतले संस्करण के आकार को देखने के लिए एक तदर्थ निर्यात करना चाहेंगे।


6

एंबेडेड बिटकोड इसका कारण है।

मान लें कि आप ENABLE_BITCODE को अक्षम नहीं करना चाहते हैं, तो आप डीबग प्रतीकों को हटा सकते हैं।

देखें http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html डिबग प्रतीकों अलग करना दूर से पहले embedding bitcode विकल्प आप कर सकते हैं में से एक है के रूप में।


1
इसका मतलब यह नहीं है कि आप दुर्घटनाग्रस्त दुर्घटना की रिपोर्ट प्राप्त नहीं करेंगे?
इयूलियन ओनोफ्रेई

0

हमें स्विफ्ट 1.2 के साथ भी यह समस्या थी। इसी मुद्दे के बारे में मेरे मूल प्रश्न के लिए दो बार स्विफ्टस्पोर्ट लाइब्रेरी को रोकने के तरीके देखें ।

मुझे पूरा यकीन है कि यह एक टूलकिन मुद्दा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.