iOS构建尺寸,配备Swift 3和吊舱

iOS构建尺寸,配备Swift 3和吊舱,ios,swift,cocoapods,Ios,Swift,Cocoapods,我刚刚注意到CoCoapod快速增加了构建大小,但是当我手动使用相同的库时,构建大小是正常的 我创建了一个带有一些pod的空白项目,构建大小为10MB,.app文件大约为40MB 我还注意到我的.app文件包含了我所有的cocoapods框架 (大约37MB)通过查看“软件包内容” 我的播客文件有这些播客 吊舱“Alamofire”,“~>4.4” 吊舱“迅捷JSON” 吊舱“IQKeyboardManagerSwift” 吊舱“ActionSheetPicker-3.0” “翠鸟”吊舱 吊舱“

我刚刚注意到CoCoapod快速增加了构建大小,但是当我手动使用相同的库时,构建大小是正常的

我创建了一个带有一些pod的空白项目,构建大小为10MB,.app文件大约为40MB

我还注意到我的.app文件包含了我所有的cocoapods框架 (大约37MB)通过查看“软件包内容”

我的播客文件有这些播客

吊舱“Alamofire”,“~>4.4”

吊舱“迅捷JSON”

吊舱“IQKeyboardManagerSwift”

吊舱“ActionSheetPicker-3.0”

“翠鸟”吊舱

吊舱“JK通知面板”

我的问题是

  • 为什么我的.app文件包含所有框架,我想这只会发生在Swift和cocoapod上(如果我错了请纠正我)
  • 我们如何通过使用cocoapods和Swift来减少构建的规模

  • 提前感谢

    如果您将这些库用作静态库,链接器可以从构建中排除不使用的部分。对于框架来说,情况并非如此。因此,如果你只是用这些库制作了一个应用程序,而没有使用它们,那么它们根本不会被包括在内,所以这不是一个公平的比较

    当你问为什么你的应用程序包含所有框架时,我想你指的是swift运行时的框架,而不是你在cocoapods中明确要求的依赖关系。所有swift应用程序都捆绑了运行时,至少在运行时变得足够稳定之前(现在经常发生变化),然后手机操作系统将包含几个版本,我们不必将其包含在应用程序中

    此外,不要被应用程序的大小吓坏。用户下载的应用程序的实际大小要小得多。您可以在iTunesConnect的“活动”选项卡中看到它,然后在上传到该选项卡后选择您的构建。我见过一些应用程序以120MB左右的速度上传到iTunesConnect,然后最终下载到用户的速度是20到30MB

    获取更多信息后编辑: 您说您正在比较将库的源代码拖动到项目中与cocoapods,这里有一个明显的区别:如果您添加库的源文件,则与添加库的编译框架不同。如果您添加源,许多未使用的内容将被优化掉,从而影响大小。例如,当库包含库本身未使用的类别时。除非使用某些链接器标志,否则类别将被优化,并且在使用库的应用程序上不起作用(如果需要更多信息,可以搜索所有加载)。当使用框架时,没有任何优化,但由于Cocoapods,这种情况不会发生。您可以使用没有cocoapod的框架,并且在大小方面应该得到完全相同的结果

    编辑2:
    看起来swift 5可能实现ABI稳定性!我们也许可以选择swift,用于那些现在需要尽可能小的应用程序

    尽量不要将框架添加为代码签名How???????????????????MayankJain offtopic但您是否也查看了启动时间,比较了POD和手动添加的文件?我的10个吊舱的启动时间现在是3000毫秒,而建议的启动时间是400毫秒。。。我认为这是因为pods。@J.Doe我不认为这是离题的,是的,我同意时间比较,这就是为什么我在这里发布这个问题,所以我们应该避免使用pods吗?是的,我同意iTunesConnect上可用后的构建大小,但我的问题是为什么临时的构建大小会有如此大的差异。。另外,使用手动文件和cocoapod创建的itunes connect版本也会有所不同。那么,这是一种更好的使用手动文件的方式吗?@MayankJain正如我在回答中所说,我需要更准确地描述在不使用Cocoapods的情况下如何包含库来更好地说明问题。如果两种方法都使用框架,那么应该没有区别。在你上传的东西上,你可能会得到一些swift运行时的复制(对此并不确定),但在iTunesConnect中,它们应该是相同的。如果你真的需要这个应用程序是超小型的,objC仍然是令人遗憾的。比如说,对于一个有一点逻辑的贴纸应用程序来说,将是1MB objC,而swift投资的是10MB,忽略资产。当我不使用cocoapods时,我只是将lib拖放到我的包中,或者你可以说手动添加文件,就像创建一个新的Xcode文件一样。根据你的评论“如果你真的需要超级小的应用程序,objC仍然是令人遗憾的类型。比如说,对于一个有一点逻辑的贴纸应用程序来说,它的objC容量将为1MB,而swift投资的objC容量约为10MB,忽略了资产。“意味着ObjC仍然是比Swift更好的选择?”MayankJain我编辑了我的回答,回应了你的第一条评论。关于你的第二条评论,不幸的是,如果应用程序大小是最重要的,是的,ObjC显然更好,至少在苹果停止在每个应用程序中嵌入运行时之前是这样。在这一点上,Swift主要是关于开发者的快乐和速度。令人高兴的是,对于大多数应用程序来说,我们都能忍受尺寸的增加。