mars是微信官方的跨平臺跨業務的終端基礎組件。 php
protobuf: Google's data interchange format. protobuf是google提供的一個開源序列化框架,相似於XML,JSON這樣的數據表示語言,其最大的特色是基於二進制,所以比傳統的XML表示高效短小得多。雖然是二進制數據格式,但並無所以變得複雜,開發人員經過按照必定的語法定義結構化的消息格式,而後送給命令行工具,工具將自動生成相關的類,能夠支持php、java、c++、python等語言環境。經過將這些類包含在項目中,能夠很輕鬆的調用相關方法來完成業務消息的序列化與反序列化工做。java
// 下載 mars 倉庫:
git clone https://github.com/Tencent/mars.git
// 切換到 libraries路徑
cd mars-master/mars/libraries
// 執行python腳本
python build_apple.py
提示輸入保存文件夾的前綴:(隨意)
input prefix for save directory. like trunk,br,tag:
選擇build的類型: 1表明iphone版mars(其中包括xlog)
Enter menu:
build mars for iphone.
複製代碼
// log_crypt.cc.rewriteme, log_crypt.h 這兩個文件已被廢棄,可直接刪除python
// 刪除.rewriteme的後綴
共三個文件log_crypt.cc.rewriteme(廢棄),longlink_packer.cc.rewriteme, shortlink_packer.cc.rewriteme
// 拖入工程,並添加庫
SystemConfiguration, CoreTelephony, Foundation, libz.tbd, libresolv9.tbd
複製代碼
/// 添加文件(demo中有)
LogHelper.h(.mm)、LogUtil.h(.mm), appender-swift-bridge.h(.mm)
/// 橋接頭文件添加
#import "appender-swift-bridge.h"
// 配置xlog, 參數分別表明:debug時記錄的級別,release時記錄的級別,保存文件的相對路徑,文件前綴
JinkeyMarsBridge().initXlogger(...)
// 自定義log
JinkeyMarsBridge().log(...)
複製代碼
在didFinishLaunchingWithOptions配置xlog 在applicationWillTerminate中destoryc++
// 安裝protobuf
brew install protobuf
// 安裝swift-protobuf-plugin
git clone https://github.com/apple/swift-protobuf.git
cd swift-protobuf
swift build -c release -Xswiftc -static-stdlib
// 將.proto文件轉換成.swift
protoc --swift_out=. name.proto
複製代碼
寫了個shell,能夠批量將當前文件夾下的全部.proto轉換成對應的.pb.swift 地址爲install.sh,可直接雙擊使用 內容以下:git
cd $(cd `dirname $0`; pwd)
for i in find *.proto
do
if [ $i == "find" ]; then
continue
fi
protoc --swift_out=. $i
echo "生成文件:$i.pb.swift"
done
複製代碼
swift-protobuf: Plugin and runtime library for using protobuf with Swiftgithub
// pod引用
pod 'SwiftProtobuf'
// 將.pb.swift添加到工程中(不用添加.proto)
// 使用
var con = Conversation()
con.name = "ashen"
con.notice = "for test"
// 傳輸時,直接傳遞data數據
let data = try? con.serializedData()
複製代碼
因爲該framework是C++寫的,對於不會C++的人(好比我)來講, 調用是個很大的問題, 能夠經過demo中的相關文件 + swift-oc橋接頭文件直接轉換成swift能夠直接調用的類 shell
首先須要查看本身的python版本, decode_mars_crypt_log_file.py只在python2.+下支持,3.+不能正常運行swift
安裝依賴庫pyelliptic, 若是同時存在2.+ 和3.+ 版本,請使用pip2 pyelliptic的最新版本1.5.8,存在bug, 須要指定版本爲1.5.7bash
pip install pyelliptic==1.5.7
複製代碼
// 切換到crypt文件夾
cd mars/mars/log/crypt
// 解密logger
python2 decode_mars_crypt_log_file.py logger_20171205.xlog
// logger_20171205.xlog.log 即爲解密出的log日誌
複製代碼
ImportError: No module named pyelliptic微信
緣由:沒有正確安裝pyelliptic的依賴庫
解決: pip2 install pyelliptic==1.5.7
若是安裝後依然報錯,多是因爲安裝了多個版本的python,pyelliptic並無安裝在2.+的python下. 在MacOS上, 若是同時安裝了2.+ 和3.+的python, pip2 和pip3 分別表明安裝到2.+ 和3.+的庫中. 因此能夠經過pip2 install pyelliptic==1.5.7 安裝
AttributeError: dlsym(0x7fc443f02f50, EVP_CIPHER_CTX_reset): symbol not found 緣由: pyelliptic的最新版本1.5.8的bug 解決: 使用1.5.7版本
pip uninstall pyelliptic
pip install pyelliptic==1.5.7
複製代碼