如何减小iPhone应用程序的大小?
备选标题(用于辅助搜索) 压缩PNG 减小iPhone存档(.ipa)的大小 添加生成规则以压缩Xcode中的图像如何减小iPhone应用程序的大小?,iphone,xcode,ipad,compression,ipa,Iphone,Xcode,Ipad,Compression,Ipa,备选标题(用于辅助搜索) 压缩PNG 减小iPhone存档(.ipa)的大小 添加生成规则以压缩Xcode中的图像 iOS应用程序只有在小于100MB时才能通过3G下载。减少应用程序大小的最佳策略是什么 我想重点关注的领域是: 数据库 代码 静态库 NB:原始问题可以在该问题的修订版中查看PNG确实是无损图像压缩的最佳选择。您可以使用优化PNG的大小,但我可以询问哪些文件占用了大量空间吗?它与非调试版本相比如何 编辑:如果您想要PNGOUT的免费GUI版本,请查看。调试版本通常比发布版本
iOS应用程序只有在小于100MB时才能通过3G下载。减少应用程序大小的最佳策略是什么 我想重点关注的领域是:
- 数据库
- 代码
- 静态库
NB:原始问题可以在该问题的修订版中查看PNG确实是无损图像压缩的最佳选择。您可以使用优化PNG的大小,但我可以询问哪些文件占用了大量空间吗?它与非调试版本相比如何
编辑:如果您想要PNGOUT的免费GUI版本,请查看。调试版本通常比发布版本大得多。尝试在发布模式下构建 有几个编译器选项也可能有所帮助。但不确定iphone发布模式的默认设置是什么-操作系统将优化为更小的二进制文件。还有一个死代码剥离选项,可以删除任何永远无法运行的代码。您也可以尝试剥离二进制文件。。但不确定这是否适用于iphone二进制文件 这是假设您的问题是由于可执行二进制大小而不是图像资源造成的。添加Xcode生成规则以压缩PNG iOS应用程序中的图像可以占大部分大小。如果它是一个通用应用程序,要求所有图像一式三份(iPhone标准,iPhone和iPad),则尤其如此 。当您的设计师在Photoshop中创建这些图像时,它们会与大量可以丢弃的元数据一起保存 但是,您不希望完全丢失所有这些数据,因为如果设计师需要更改图像,这对他们很有用 气动优化 有几种工具可以优化PNG文件,但是
pngout
似乎是最好的选择
pngout
复制到项目中的目录。将二进制文件添加到项目目录可确保在任何系统上构建项目的任何人都可以使用DEBUG\u BUILD=1
和DISTRIBUTION\u BUILD=1
- 将进程设置为“名称匹配的源文件”及其值
李>*.png
- 将Using设置为“自定义脚本”
echo "----------------------------------------------------------------" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${INPUT_FILE_PATH}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo ${GCC_PREPROCESSOR_DEFINITIONS} >> "${DERIVED_FILES_DIR}/pngout-log.txt"
BUILD=`echo ${GCC_PREPROCESSOR_DEFINITIONS} | grep -o DISTRIBUTION_BUILD`
echo $BUILD >> "${DERIVED_FILES_DIR}/pngout-log.txt"
if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
fi
echo "...done." >> "${DERIVED_FILES_DIR}/pngout-log.txt"
有几个值得注意的环境变量:
-图像文件的完整路径${INPUT_FILE_PATH}
-图像文件名(带扩展名)${INPUT_FILE_NAME}
-其中Xcode存储构建文件等${DERIVED_FILES_DIR}
-上面设置的宏${GCC\u预处理器\u定义}
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
${PROJECT_DIR}
是项目的完整路径,-y
覆盖现有文件,-q
限制pngout
的输出,-force
防止pngout
在无法优化文件并导致Xcode报告生成错误时以状态2退出
这个脚本只是测试${GCC_PREPROCESSOR_DEFINITIONS}
,看看它是否是发行版_BUILD
,如果是,它使用pngout
优化文件,否则它会将其复制到${DERIVED_FILES_DIR}
以便Xcode可以继续处理它
最后,别忘了将
${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}
添加到“Output FILES”列表中这是Xcode知道如何查找已处理的文件的方式 @rjstelling有一个非常好的答案,我说得再好不过了,但有一个小问题。它无法处理本地化图像。这只是一个问题,如果你在图像中嵌入文本,这是我强烈建议永远不要做,如果你可以避免它。但是,如果必须使用本地化图像,请按照rjstelling的所有步骤操作,但不使用:
if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
fi
使用以下代码:
if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
fi
注意,唯一的更改是导出文件路径。您必须将INPUT\u FILE\u REGION\u PATH\u COMPONENT
预先添加到导出路径,以使图像的定位正常工作<代码>输入文件\区域\路径\组件通常为空,除非特定文件有本地化文件夹。在这种情况下,它提供了文件夹名称和尾部斜杠,因此您不必这样做
您还必须将Output Files
设置更改为${DERIVED_Files_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}
,才能正常工作
我不确定我是否是唯一一个有过这个问题的人,但希望它能帮助一些人。我用它来缩小应用程序的大小。更多信息,请查看本案例研究 在过去几个月里,我已经将iOS应用程序的容量从90MB减少到50MB。以下是一些提示和工具: 配置iOS应用程序大小
-
<