iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0

最後

還是分享一下成品 LeakDetect

安裝方式

brew install mint
mint install yume190/LeakDetect

使用方式

Scheme

因為餵給 xcodebuild 的參數是使用 scheme 而不是 Target Name

TargetType

一些檔案名稱或路徑就能夠判斷是哪一種類型

  • .xcodeproj
  • .xcworkspace
  • 該路徑有 package.swift

因此能做一定程度的判斷

@Option(name: [.customLong("targetType", withSingleDash: false)], help: "[\(TargetType.all)]")
var targetType: TargetType = .auto

單一檔案

這個情況會缺少太多來自設定檔案的編譯參數

最少還需要兩個參數才能編譯

  • sdk 位置
    • /usr/bin/xcrun --sdk iphoneos --show-sdk-path
  • target triple
    • ios: arm64-apple-ios11.0
    • iphone simulator: x86_64-apple-ios11.0-simulator

輸入參數

  • -sdk $SDK_PATH
  • -target arm64-apple-ios11.0

其他參數

leakDetect 也能夠輸入額外參數

leakDetect ... -- arg1 arg2

Module Name

除了可以指定 module name 以外

如果沒特別指定 module name,主要的輸入檔案名稱將成為 module name

下面這個例子 module namexxx

leakDetect --file xxx.swift

額外檔案

leakDetect --file main.swift -- file1.swift file2.swift

leakDetect \
    --module "SCHEME NAME" \
    --file Sample.xcworkspace

leakDetect \
    --module "SCHEME NAME" \
    --file Sample.xcodeproj

# spm
leakDetect \
    --module TARGET_NAME \
    --file .

# file
leakDetect \
    --sdk macosx \
    --file xxx.swift

TODO

  • 導入 IndexStoreDB
    • 判斷 type(struct/class/...)
  • 處理 D14 所造成多的偏移量
  • struct type 的處理方式
  • 實作 skip type
  • 可能對同一個 syntax 重複呼叫太多次 cursor info
    • cursor info 的執行時間不低
  • 實際案例,一個 repo 提供所有 leak 的位置,並且用指令查詢偵測後有相似的結果‧
  • ...

成果


上一篇
虛驚一場 Capture List
系列文
自己的 Leak, 自己抓(swift)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言