因為個人用 Sublime Text 3 來寫 tweaks,
但是跟一般用 Xcode 寫 App 比起來,除了沒有自動補完之外,
也沒有在編譯前糾錯的功能。
不過 Sublime Text 的優點就是有很多外掛可以使用,
昨天弄了一整天,終於搞定了。
先來說我的開發環境:
系統跟編譯器還有 SDK 部分是 OS X 10.9 + Xcode 5 + iOS 7.0 SDK
Sublime Text 這邊是 3.0 ,搭配 theos logos 來寫 tweak。
首先,先在 Sublime Text 3 選擇 Preferences > Browse Packages …
然後在終端機 cd 到該目錄,輸入
git clone --recursive https://github.com/quarnster/SublimeClang SublimeClang git pull && git submodule foreach --recursive git pull origin master
然後編譯 SublimeClang,或者在這邊下載我編譯好的檔案,
解開壓縮之後把兩個 dylib 丟進去剛剛的 SublimeClang/internals 裡面
之後到 Sublime Text 3 的 Preferences > Package Settings > SublimeClang > Settings – Default
找到 options : 加入下面這段
//For logos "-x", "objective-c++", "-c", "-DTARGET_IPHONE=1", "-O2", "-include", "/opt/theos/Prefix.pch", "-I", "/opt/theos/include/", //For iOS "-isystem", "/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include/", "-isystem", "/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include/c++/4.2.1/", "-I", "/Applications/Xcode.app/Contents/Developer/usr/lib/llvm-gcc/4.2.1/include", "-arch","armv7", "-isysroot", "/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk", "-D__IPHONE_OS_VERSION_MIN_REQUIRED=__IPHONE_4_3", "-miphoneos-version-min=4.3",
再找到 analyzer_commandline,加入下面這段
//Theos Logos "/usr/bin/xcrun", "-sdk", "iphoneos", "clang++",
最後再找到 analyzer_extensions ,加上
"x", "xi", "xm", "xmi"
就好了
不過這時候 theos logos 會被認為是錯誤,但自動補完的部分是正常的,
這時候你可以選擇發揮無視技能,或者按照接下來的教學做
去 SublimeClang/sublimeclang.py
找到 295 – 299 行,應該長這樣:
errString = "%s%s\n" % (errString, err) if diag.severity == cindex.Diagnostic.Warning: warningCount += 1 elif diag.severity >= cindex.Diagnostic.Error: errorCount += 1
改成這樣
if not err.endswith("expected unqualified-id") and not err.endswith("missing context for method declaration"): errString = "%s%s\n" % (errString, err) if diag.severity == cindex.Diagnostic.Warning: warningCount += 1 elif diag.severity >= cindex.Diagnostic.Error: errorCount += 1
再找到下面一點點的
add_error_mark( diag.severityName, filename, f.line - 1, diag.spelling)
改成這樣:
if not err.endswith("expected unqualified-id") and not err.endswith("missing context for method declaration"): add_error_mark( diag.severityName, filename, f.line - 1, diag.spelling)
就好了,重要的是主要注意原本的 code 那邊 tab 要空好就行了
參考資料:
在 Sublime Text 3 中使用 SublimeClang 插件