因為個人用 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 到該目錄,輸入
1 2 3 |
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 : 加入下面這段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//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,加入下面這段
1 2 3 4 |
//Theos Logos "/usr/bin/xcrun", "-sdk", "iphoneos", "clang++", |
最後再找到 analyzer_extensions ,加上
1 2 3 4 |
"x", "xi", "xm", "xmi" |
就好了
不過這時候 theos logos 會被認為是錯誤,但自動補完的部分是正常的,
這時候你可以選擇發揮無視技能,或者按照接下來的教學做
去 SublimeClang/sublimeclang.py
找到 295 - 299 行,應該長這樣:
1 2 3 4 5 |
errString = "%s%s\n" % (errString, err) if diag.severity == cindex.Diagnostic.Warning: warningCount += 1 elif diag.severity >= cindex.Diagnostic.Error: errorCount += 1 |
改成這樣
1 2 3 4 5 6 |
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 |
再找到下面一點點的
1 2 |
add_error_mark( diag.severityName, filename, f.line - 1, diag.spelling) |
改成這樣:
1 2 3 |
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 插件
發佈留言