在日常iOS开发过程中,难免发生收集到崩溃日志但是却没有对应的dSYM文件的问题。
针对这种问题有一种解决方案就是收集每次编译产生的dSYM文件。虽然这不是最佳的方案,但结合使用atos
强行符号化某个地址,还是比较有效的。
如何使用atos
符号化地址在另一篇文章中会介绍。接下来就介绍如何添加脚本收集dSYM文件。
在Build Phases
中点击加号,添加New Run Script Phases
填写脚本
python 'path/to/ios_package_manager.py' $CONFIGURATION_BUILD_DIR $PRODUCT_NAME
将path/to/ios_package_manager.py
指向到你保存ios_package_manager.py的位置
ios_package_manager.py的内容如下:
import shutil
import sys
import os
import datetime
#切换成你想保存dSYM文件的位置
dst_package_path = os.path.expanduser('~/Documents/Packages/')
if __name__ == '__main__':
src_dir = sys.argv[1]
product_name = sys.argv[2]
package_dir = os.path.join(dst_package_path,product_name)
if os.path.exists(package_dir) == False:
os.mkdir(package_dir)
print(product_name)
src_dysm_path = os.path.join(src_dir,product_name + '.app.dSYM')
src_app_path = os.path.join(src_dir, product_name + '.app')
print(src_app_path)
print(src_dysm_path)
if os.path.exists(src_dysm_path):
new_pack_name = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S') + ".app.dSYM"
os.system('cp -r {0} {1}'.format(src_dysm_path, os.path.join(package_dir,new_pack_name)))
elif os.path.exists(src_app_path):
new_pack_name = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S') + ".app"
print('cp -r {0} {1}'.format(src_app_path,new_pack_name))
os.system('cp -r {0} {1}'.format(src_app_path,os.path.join(package_dir,new_pack_name)))
这样每次编译产生的dSYM文件默认就会保存到~/Documents/Packages/了